## **Overview**
Provides functions and data structures related to network operations.
**Since:**
1.0
**Version:**
1.0
## **Summary**
## Files
## Data Structures
Defines the network interface information. | |
Defines the network adapter information. | |
Describes the host name and address information. | |
Describes the socket address information. |
## Macros
Defines the first address in h_addr_list for backward compatibility. | |
Defines options for socket level. |
## Functions
htonl (uint32_t n) | Converts an integer from the host byte order to the network byte order. |
htons (uint16_t n) | Converts a 16-bit integer from the host byte order to the network byte order. |
ntohl (uint32_t n) | Converts an integer from the network byte order to the host byte order. |
ntohs (uint16_t n) | Converts a 16-bit integer from the network byte order to the host byte order. |
inet_addr (const char *p) | Converts a string from the IPv4 numbers-and-dots notation to the binary data in network byte order. |
inet_network (const char *p) | Converts a string from the IPv4 numbers-and-dots notation to the binary data in host byte order. |
inet_ntoa (struct in_addr in) | Converts a network address to a string in dotted-decimal format. |
inet_pton (int af, const char *__restrict s, void *__restrict a0) | Converts a string to a network address in the specified address family. |
inet_ntop (int af, const void *restrict a0, char *restrict s, socklen_t l) | Converts a network address in the specified address family to a string. |
inet_aton (const char *s0, struct in_addr *dest) | Converts an IP address from the string format to the 32-bit binary format in network byte order. |
inet_makeaddr (in_addr_t n, in_addr_t h) | Converts the network number and host address to the network address. |
inet_lnaof (struct in_addr in) | Converts an IP address into a host ID in host byte order without network bits. |
inet_netof (struct in_addr in) | Extracts the network number from the in_addr structure and converts it to the host byte order. |
freeifaddrs (struct ifaddrs *ifp) | Frees the network interface information obtained by getifaddrs. |
if_freenameindex (struct if_nameindex *idx) | Frees the network adapter information obtained by if_nameindex. |
setprotoent (int stayopen) | Opens a connection to the database and sets the next entry to the first entry. |
getprotoent (void) | Retrieves the current protocol information. |
getprotobyname (const char *name) | Retrieves the information about a specified protocol. |
getprotobynumber (int num) | Retrieves the information about a protocol with the specified number. |
herror (const char *msg) | |
hstrerror (int ecode) | Retrieves error information associated with the specified error number. |
ether_ntoa (const struct ether_addr *p_a) | Converts binary data in network byte order into a standard 48-bit Ethernet host address in the colon hexadecimal notation. |
ether_aton (const char *x) | Converts a standard 48-bit Ethernet host address in the colon hexadecimal notation into binary data in network byte order. |
ether_ntoa_r (const struct ether_addr *p_a, char *x) | Converts binary data in network byte order into a standard 48-bit Ethernet host address in the colon hexadecimal notation. This function is reentrant. |
ether_aton_r (const char *x, struct ether_addr *p_a) | Converts a standard 48-bit Ethernet host address in the colon hexadecimal notation into binary data in network byte order. This function is reentrant. |
dn_comp (const char *src, unsigned char *dst, int space, unsigned char **dnptrs, unsigned char **lastdnptr) | Compresses a network domain name. |
dn_expand (const unsigned char *base, const unsigned char *end, const unsigned char *src, char *dest, int space) | Expands a compressed domain name to a full domain name. |
socket (int domain, int type, int protocol) | Creates a socket and returns its descriptor. |
shutdown (int sockfd, int how) | |
bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen) | Binds a local protocol address to a socket. |
connect (int sockfd, const struct sockaddr *addr, socklen_t addrlen) | Initiates a connection to a socket. |
listen (int sockfd, int backlog) | Listens for network connections. |
accept (int sockfd, struct sockaddr *__restrict addr, socklen_t *__restrict addrlen) | Accepts incoming connection requests. |
getsockname (int fd, struct sockaddr *restrict addr, socklen_t *restrict len) | Retrieves the local address of the specified socket. |
getpeername (int fd, struct sockaddr *restrict addr, socklen_t *restrict len) | Retrieves the peer address of the specified socket. |
send (int fd, const void *buf, size_t len, int flags) | |
recv (int fd, void *buf, size_t len, int flags) | Receives data from another socket. |
sendto (int fd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t alen) | |
recvfrom (int fd, void *__restrict buf, size_t len, int flags, struct sockaddr *__restrict addr, socklen_t *__restrict alen) | Receives data from a specified socket. |
sendmsg (int fd, const struct msghdr *msg, int flags) | |
recvmsg (int fd, struct msghdr *msg, int flags) | Receives data from a specified socket. |
getsockopt (int fd, int level, int optname, void *__restrict optval, socklen_t *__restrict optlen) | |
setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) |
## **Details**
## **Function Documentation**
## accept\(\)
```
int accept (int sockfd, struct [sockaddr](sockaddr.md) *__restrict addr, socklen_t *__restrict addrlen )
```
**Description:**
Accepts incoming connection requests.
**Parameters:**
sockfd | Indicates the socket descriptor. |
addr | Indicates the pointer to the socket address requiring for the connection. |
addrlen | Indicates the length of the address structure pointed to by addr. |
**Returns:**
Returns a valid socket if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
The socket requiring for the connection is not of the NETCONN_TCP type. | |
Failure to receive events in non-blocking mode. | |
Failure to creat a new socket. | |
Failure to receive the remote information. | |
## bind\(\)
```
int bind (int sockfd, const struct [sockaddr](sockaddr.md) * addr, socklen_t addrlen )
```
**Description:**
Binds a local protocol address to a socket.
**Parameters:**
sockfd | Indicates the socket descriptor. |
addr | Indicates the address to be bound to the socket. |
addrlen | Indicates the length of the address structure pointed to by addr. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
## connect\(\)
```
int connect (int sockfd, const struct [sockaddr](sockaddr.md) * addr, socklen_t addrlen )
```
**Description:**
Initiates a connection to a socket.
**Parameters:**
sockfd | Indicates the socket descriptor. |
addr | Indicates the pointer to the address to be connected. |
addrlen | Indicates the length of the address structure pointed to by addr. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor | |
Restart due to connection failure | |
Shut-down due to connection failure |
## dn\_comp\(\)
```
int dn_comp (const char * src, unsigned char * dst, int space, unsigned char ** dnptrs, unsigned char ** lastdnptr )
```
**Description:**
Compresses a network domain name.
To reduce the size of DNS messages, domain names in the messages are compressed. For details about the compression scheme, see RFC 1035.
**Parameters:**
**Returns:**
Returns the length of the compressed domain name if the operation is successful; returns **-1** otherwise.
## dn\_expand\(\)
```
int dn_expand (const unsigned char * base, const unsigned char * end, const unsigned char * src, char * dest, int space )
```
**Description:**
Expands a compressed domain name to a full domain name.
The compressed domain name is contained in a query or reply message.
**Parameters:**
**Returns:**
Returns the length of the compressed domain name if the operation is successful; returns **-1** otherwise.
## ether\_aton\(\)
```
struct ether_addr* ether_aton (const char * x)
```
**Description:**
Converts a standard 48-bit Ethernet host address in the colon hexadecimal notation into binary data in network byte order.
**Parameters:**
x | Indicates the pointer to the host address to be converted. |
**Returns:**
Returns the binary data if the operation is successful; returns **0** otherwise.
## ether\_aton\_r\(\)
```
struct ether_addr* ether_aton_r (const char * x, struct ether_addr * p_a )
```
**Description:**
Converts a standard 48-bit Ethernet host address in the colon hexadecimal notation into binary data in network byte order. This function is reentrant.
This function is used in multitasking scenarios.
**Parameters:**
x | Indicates the pointer to the host address to be converted. |
p_a | Indicates the pointer to the temporary buffer during conversion. |
**Returns:**
Returns the binary data represented by **ether\_addr** if the operation is successful; returns **0** otherwise.
## ether\_ntoa\(\)
```
char* ether_ntoa (const struct ether_addr * p_a)
```
**Description:**
Converts binary data in network byte order into a standard 48-bit Ethernet host address in the colon hexadecimal notation.
**Parameters:**
p_a | Indicates the pointer to the binary data to be converted. |
**Attention:**
Different from glibc \(for example, 1:2:3:4:5:f\), 0 is prefixed and letters are capitalized \(for example, 01:02:03:04:05:0F\).
**Returns:**
Returns the host address if the operation is successful; returns **0** otherwise.
## ether\_ntoa\_r\(\)
```
char* ether_ntoa_r (const struct ether_addr * p_a, char * x )
```
**Description:**
Converts binary data in network byte order into a standard 48-bit Ethernet host address in the colon hexadecimal notation. This function is reentrant.
This function is used in multitasking scenarios.
**Parameters:**
p_a | Indicates the pointer to the binary data to be converted. |
x | Indicates the pointer to the temporary buffer during conversion. |
**Attention:**
Different from glibc \(for example, 1:2:3:4:5:f\), 0 is prefixed and letters are capitalized \(for example, 01:02:03:04:05:0F\).
**Returns:**
Returns the host address if the operation is successful; returns **0** otherwise.
## freeifaddrs\(\)
```
void freeifaddrs (struct [ifaddrs](ifaddrs.md) * ifp)
```
**Description:**
Frees the network interface information obtained by **getifaddrs**.
**Parameters:**
ifp | Indicates the pointer to the network interface information to be freed. |
## getpeername\(\)
```
int getpeername (int fd, struct [sockaddr](sockaddr.md) *restrict addr, socklen_t *restrict len )
```
**Description:**
Retrieves the peer address of the specified socket.
**Parameters:**
fd | Indicates the socket descriptor. |
addr | Indicates the pointer to the address to be retrieved. |
len | Indicates the pointer to the length of the address pointed to by addr. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
## getprotobyname\(\)
```
struct protoent* getprotobyname (const char * name)
```
**Description:**
Retrieves the information about a specified protocol.
**Parameters:**
addr | Indicates the pointer to the protocol name. |
**Attention:**
The **/etc/protocols** configuration file is not supported. Only the following built-in protocols are supported: ip/icmp/igmp/ggp/ipencap/st/tcp/egp/pup/udp/hmp/xns-idp/rdp/iso-tp4/xtp/ ddp/idpr-cmtp/ipv6/ipv6-route/ipv6-frag/idrp/rsvp/gre/esp/ah/skip/ipv6-icmp/ ipv6-nonxt/ipv6-opts/rspf/vmtp/ospf/ipip/encap/pim/raw \(This protocol does not have the **aliases** attribute, that is, **aliases** is empty.\)
**Returns:**
Returns the protocol information if the operation is successful; returns **NULL** otherwise.
## getprotobynumber\(\)
```
struct protoent* getprotobynumber (int num)
```
**Description:**
Retrieves the information about a protocol with the specified number.
**Parameters:**
num | Indicates the protocol number. |
**Attention:**
The **/etc/protocols** configuration file is not supported. Only the following built-in protocols are supported: ip/icmp/igmp/ggp/ipencap/st/tcp/egp/pup/udp/hmp/xns-idp/rdp/iso-tp4/xtp/ ddp/idpr-cmtp/ipv6/ipv6-route/ipv6-frag/idrp/rsvp/gre/esp/ah/skip/ipv6-icmp/ ipv6-nonxt/ipv6-opts/rspf/vmtp/ospf/ipip/encap/pim/raw \(This protocol does not have the **aliases** attribute, that is, **aliases** is empty.\)
**Returns:**
Returns the protocol information if the operation is successful; returns **NULL** otherwise.
## getprotoent\(\)
```
struct protoent* getprotoent (void )
```
**Description:**
Retrieves the current protocol information.
**Attention:**
The **/etc/protocols** configuration file is not supported. Only the following built-in protocols are supported: ip/icmp/igmp/ggp/ipencap/st/tcp/egp/pup/udp/hmp/xns-idp/rdp/iso-tp4/xtp/ ddp/idpr-cmtp/ipv6/ipv6-route/ipv6-frag/idrp/rsvp/gre/esp/ah/skip/ipv6-icmp/ ipv6-nonxt/ipv6-opts/rspf/vmtp/ospf/ipip/encap/pim/raw \(This protocol does not have the **aliases** attribute, that is, **aliases** is empty.\)
**Returns:**
Returns the protocol information if the operation is successful; returns **NULL** otherwise.
## getsockname\(\)
```
int getsockname (int fd, struct [sockaddr](sockaddr.md) *restrict addr, socklen_t *restrict len )
```
**Description:**
Retrieves the local address of the specified socket.
**Parameters:**
fd | Indicates the socket descriptor. |
addr | Indicates the pointer to the address to be retrieved. |
len | Indicates the pointer to the length of the address pointed to by addr. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
## getsockopt\(\)
```
int getsockopt (int fd, int level, int optname, void *__restrict optval, socklen_t *__restrict optlen )
```
**Description:**
Retrieves the socket options.
**Parameters:**
fd | Indicates the socket descriptor. |
level | Indicates the protocol level at which the option resides. Only SOL_SOCKET is supported. |
optname | Indicates the socket options to be retrieved, which has the following values: |
optval | Indicates the pointer to the option data. |
optlen | Indicates the pointer to the size of the buffer pointed to by optval. |
Permits sending broadcast messages. | |
Sets or gets the maximum socket receiving buffer in bytes. | |
Prohibits messages from being sent via a gateway. | |
Binds this socket to a particular device. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
The input parameter is a null pointer. | |
## herror\(\)
```
void herror (const char * msg)
```
**Description:**
Prints error information.
**Parameters:**
msg | Indicates the pointer to the string to be printed together with the error information. This parameter can be null. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Incorrect symbols or parameters | |
## hstrerror\(\)
```
const char* hstrerror (int ecode)
```
**Description:**
Retrieves error information associated with the specified error number.
**Parameters:**
ecode | Indicates the error number. |
**Returns:**
Returns the string representing the error information.
## htonl\(\)
```
uint32_t htonl (uint32_t n)
```
**Description:**
Converts an integer from the host byte order to the network byte order.
**Parameters:**
n | Indicates the integer in host byte order. |
**Returns:**
Returns the original data if the system is in big-endian mode; returns the converted data otherwise.
## htons\(\)
```
uint16_t htons (uint16_t n)
```
**Description:**
Converts a 16-bit integer from the host byte order to the network byte order.
**Parameters:**
n | Indicates the integer in host byte order. |
**Returns:**
Returns the original data if the system is in big-endian mode; returns the converted data otherwise.
## if\_freenameindex\(\)
```
void if_freenameindex (struct [if_nameindex](if_nameindex.md) * idx)
```
**Description:**
Frees the network adapter information obtained by [if\_nameindex](if_nameindex.md).
**Parameters:**
idx | Indicates the pointer to the network adapter to be freed. |
## inet\_addr\(\)
```
in_addr_t inet_addr (const char * p)
```
**Description:**
Converts a string from the IPv4 numbers-and-dots notation to the binary data in network byte order.
**Parameters:**
p | Indicates the pointer to the string to be converted. |
**Returns:**
Returns the converted data if the operation is successful; returns **-1** otherwise.
## inet\_aton\(\)
```
int inet_aton (const char * s0, struct in_addr * dest )
```
**Description:**
Converts an IP address from the string format to the 32-bit binary format in network byte order.
**Parameters:**
s0 | Indicates the pointer to the IP address to be converted. |
dest | Indicates the pointer to the structure for conversion. |
**Returns:**
Returns **1** if the operation is successful; returns **0** otherwise.
## inet\_lnaof\(\)
```
in_addr_t inet_lnaof (struct in_addr in)
```
**Description:**
Converts an IP address into a host ID in host byte order without network bits.
**Parameters:**
in | Indicates the network address structure. |
**Returns:**
Returns the converted host address.
## inet\_makeaddr\(\)
```
struct in_addr inet_makeaddr (in_addr_t n, in_addr_t h )
```
**Description:**
Converts the network number and host address to the network address.
**Parameters:**
n | Indicates the network number. |
h | Indicates the host address. |
**Returns:**
Returns the converted network address.
## inet\_netof\(\)
```
in_addr_t inet_netof (struct in_addr in)
```
**Description:**
Extracts the network number from the **in\_addr** structure and converts it to the host byte order.
**Parameters:**
in | Indicates the network address structure. |
**Returns:**
Returns the converted network number.
## inet\_network\(\)
```
in_addr_t inet_network (const char * p)
```
**Description:**
Converts a string from the IPv4 numbers-and-dots notation to the binary data in host byte order.
**Parameters:**
p | Indicates the pointer to the string to be converted. |
**Returns:**
Returns the converted data if the operation is successful; returns **-1** otherwise.
## inet\_ntoa\(\)
```
char* inet_ntoa (struct in_addr in)
```
**Description:**
Converts a network address to a string in dotted-decimal format.
**Parameters:**
in | Indicates the network address to be converted. |
**Returns:**
Returns the string.
## inet\_ntop\(\)
```
const char* inet_ntop (int af, const void *restrict a0, char *restrict s, socklen_t l )
```
**Description:**
Converts a network address in the specified address family to a string.
**Parameters:**
**Returns:**
Returns the converted string if the operation is successful; returns **NULL** and sets **errno** to a value in the following table if the operation fails.
Insufficient space for conversion | |
## inet\_pton\(\)
```
int inet_pton (int af, const char *__restrict s, void *__restrict a0 )
```
**Description:**
Converts a string to a network address in the specified address family.
**Parameters:**
af | Indicates the address family. Currently, only AF_INET and AF_INET6 are supported. |
s | Indicates the pointer to the string to be converted. |
a0 | Indicates the pointer to the converted data. |
**Returns:**
Returns **1** if the operation is successful; returns **0** if the input address family is invalid; returns **-1** if the operation fails. The error codes are set as follows:
## listen\(\)
```
int listen (int sockfd, int backlog )
```
**Description:**
Listens for network connections.
**Parameters:**
sockfd | Indicates the socket descriptor. |
backlog | Indicates the maximum length of the queue to accept incoming connection requests. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor |
## ntohl\(\)
```
uint32_t ntohl (uint32_t n)
```
**Description:**
Converts an integer from the network byte order to the host byte order.
**Parameters:**
n | Indicates the integer in network byte order. |
**Returns:**
Returns the original data if the system is in big-endian mode; returns the converted data otherwise.
## ntohs\(\)
```
uint16_t ntohs (uint16_t n)
```
**Description:**
Converts a 16-bit integer from the network byte order to the host byte order.
**Parameters:**
n | Indicates the integer in network byte order. |
**Returns:**
Returns the original data if the system is in big-endian mode; returns the converted data otherwise.
## recv\(\)
```
ssize_t recv (int fd, void * buf, size_t len, int flags )
```
**Description:**
Receives data from another socket.
**Parameters:**
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Returns:**
Returns the length of the received data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
## recvfrom\(\)
```
ssize_t recvfrom (int fd, void *__restrict buf, size_t len, int flags, struct [sockaddr](sockaddr.md) *__restrict addr, socklen_t *__restrict alen )
```
**Description:**
Receives data from a specified socket.
**Parameters:**
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Returns:**
Returns the length of the received data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
## recvmsg\(\)
```
ssize_t recvmsg (int fd, struct msghdr * msg, int flags )
```
**Description:**
Receives data from a specified socket.
**Parameters:**
fd | Indicates the socket descriptor. |
msg | Indicates the pointer to the address to receive the message header. |
flags | Indicates the socket flags. This parameter has the following values: |
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Attention:**
This function does not allow sending ancillary data. Currently, the length of the array defined by **msg\_iov** can only be **1**.
**Returns:**
Returns the length of the received data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor |
## send\(\)
```
ssize_t send (int fd, const void * buf, size_t len, int flags )
```
**Description:**
Sends data to another socket.
**Parameters:**
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Returns:**
Returns the length of the sent data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor |
## sendmsg\(\)
```
ssize_t sendmsg (int fd, const struct msghdr * msg, int flags )
```
**Description:**
Sends data to another socket.
**Parameters:**
fd | Indicates the socket descriptor. |
msg | Indicates the pointer to the address of the message header to be sent. |
flags | Indicates the socket flags. This parameter has the following values: |
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Attention:**
This function does not support ancillary data.
**Returns:**
Returns the length of the sent data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor | |
## sendto\(\)
```
ssize_t sendto (int fd, const void * buf, size_t len, int flags, const struct [sockaddr](sockaddr.md) * addr, socklen_t alen )
```
**Description:**
Sends data to another socket.
**Parameters:**
Enables the non-blocking operation. | |
The caller has more data to send. | |
**Returns:**
Returns the length of the sent data if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
Incorrect connection type obtained based on the socket descriptor |
## setprotoent\(\)
```
void setprotoent (int stayopen)
```
**Description:**
Opens a connection to the database and sets the next entry to the first entry.
**Parameters:**
stayopen | Reserved for interface compatibility (not used currently). |
**Attention:**
The **stayopen** parameter does not take effect. It is equivalent to nonzero for [getprotoent](net.md#gaca0da70657afbc3e723990bb229deec3) and zero for [getprotobyname](net.md#ga83ac8a97dd9d895cda658af3aa46fd55) and **getprotobynumbmer**.
## setsockopt\(\)
```
int setsockopt (int fd, int level, int optname, const void * optval, socklen_t optlen )
```
**Description:**
Sets the socket options.
**Parameters:**
fd | Indicates the socket descriptor. |
level | Indicates the protocol level at which the option resides. Only SOL_SOCKET is supported. |
optname | Indicates the socket options to set, which has the following values: |
optval | Indicates the pointer to the option data. |
optlen | Indicates the size of the buffer pointed to by optval. |
Permits sending broadcast messages. | |
Sets or gets the maximum socket receiving buffer in bytes. | |
Prohibits messages from being sent via a gateway. | |
Binds this socket to a particular device. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Invalid socket or socket status exception | |
The input parameter is a null pointer. | |
## shutdown\(\)
```
int shutdown (int sockfd, int how )
```
**Description:**
Shuts down a socket.
**Parameters:**
sockfd | Indicates the socket descriptor. |
how | Indicates how to shut down the socket. You can disable either receptions by SHUT_RD or transmissions by SHUT_WR, or both by SHUT_RDWR. |
**Returns:**
Returns **0** if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.
Incorrect connection type obtained based on the socket descriptor |
## socket\(\)
```
int socket (int domain, int type, int protocol )
```
**Description:**
Creates a socket and returns its descriptor.
**Parameters:**
domain | Indicates the socket domain. |
type | Indicates the socket type. |
protocol | Indicates the socket protocol. |
**Attention:**
Only the following socket domains are supported: **AF\_INET**, **AF\_INET6**. Only the socket types **SOCK\_RAW**, **SOCK\_DGRAM** and **SOCK\_STREAM** are supported, and the OR operation between the extra socket flag and the socket type is not supported.
**Returns:**
Returns the descriptor for the new socket if the operation is successful; returns **-1** and sets **errno** to a value in the following table if the operation fails.