Socket的地点布局
在成立socket通信的进程中地点起着很要害的浸染,在设计TCP/IP网络措施时,必需对 socket 的地点布局有清晰的认识。
TCP/IP 的地点数据布局。
struct sockaddr {
u_short safamily;/*地点族,AF_XXX*/
char sa_data[14];/*14字节的特定协议地点*/
}
个中14字节的sa_data随协议而差异。在TCP/IP协议族中,地点数据布局为:
struct in_addr{
u_long s_addr;/*32比特的IP地点,网络字节顺序 */
};
struct sockaddr_in{
short sin_family; /*AF_INET*/
u_short sin_short; /*16比特的端标语,网络字节顺序*/
struct in_addr sin_addr; /*32比特的IP地点,网络字节顺序*/
char sin_zero[8]; /*未用*/
}
网络字节顺序是TCP/IP中划定好的一种数据暗示名目,它与详细的CPU范例、操纵系统等无关,从而可以担保数据在差异主机之间传输时可以或许被正确表明。由主机字节顺序转换为网络字节顺序的两个函数如下:htons():将16比特的主机字节顺序数据转换为网络字节顺序htonl():将32比特的主机字节顺序数据转换为网络字节顺序与此相对应的将网络字节顺序转换为主机字节顺序的函数为:
ntohs():将16比特的网络字节顺序数据转换为主机字节顺序ntohl():将32比特的网络字节顺序数据转换为主机字节顺序由于各类socket地点布局的长度相差很大,TCP/IP地点族的地点长度为8字节,XNS地点为14字节,UNIX地点不定,最长可达110字节,所以无法以一种统一的名目界说它们,需要在bind()挪用中明晰指定socket地点的长度。
当bind()参数无效或端口已被其他措施所用时,函数返回-1,表白本次socket定名失败。