文档介绍:APUE 16chp 网络 IPC :套接字 1 、创建套接字#include <sys/> I nt socket( int domain, int type, int protocol); 注意: AF_LOCAL 域是 AF_UNIX 的别名, AF_UNSPEC 域可以代表任何域。 2 、套接字通信是双向的,禁止套接字上的输入/ 输出#include < sys/> I nt shutdown ( int sockfd, int how); 3 、处理字节序和网络字节序之间的轮换: #include< arpa/> U int32_t htonl (uint32_t hostint32); U int16_t htons(uint16_t hostint16); U int32_t ntohl (int32); U int16_t ntohs (int16); 4 、地址格式: S truct sockaddr {S a_family_t sa_family; C har sa_data[]; }在 Linux 中,该结构定义如下: S truct sockaddr {S a_family_t sa_family; C har sa_data[14]; }; 而在 FreeBSD 中,该结构定义如下: S truct sockaddr {U nsigned char sa_len; S a_family_t sa_family; C har sa_data[14]; }; 因特网地址定义在</> 中。在 IPV4 因特网域( )中,套接字地址用如下结构 sokaddr_in 表示: S truct in_addr {I n_addr_t s_addr; }S truct sockaddr_in {S a_family_t sin_family; I n_port_t sin_port; S truct in_addr sin_addr; }; 数据类型 in_port_t 定义成 uint16_t 。数据类型 in_addr_t 定义成 uint32_t 。这些整数类型在<> 中定义并指定了相应的位数。与 IPV4 因特网域( ) 相比较, IPV6 因特网域( 6 ) 套接字地址用如下结构 sockaddr_in6 表示: S truct in6_addr {U int8_t s6_addr[16]; };S truct sockaddr_in6 {S a_family_t sin6_family; I n_port_t sin6_port; U int32_t sin6_flowinfo; S truct in6_addr sin6_addr; U int32_t sin6_scope_id; }在 Linux 中, sockaddr_in 定义如下: S truct sockaddr_in {S a_family_t sin_family; I n_port_t sin_port; S truct in_addr sin_addr; U nsigned char sin_zero[8]; };5、#include <arpa/> C onst char *