sockaddr 和 sockaddr_in 的差别和联系

来源:互联网 发布:2016网络黑色产业链 编辑:程序博客网 时间:2024/05/21 06:45

Sockfd是调用socket函数返回的socket描述符,my_addr是个指向包含有本机IP地址及端口号等信息的sockaddr类型的指
针;addrlen常被设置为sizeof(struct sockaddr)。
   
struct sockaddr结构类型是用来保存socket信息的:
   
struct sockaddr
{   
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;
sa_data则包含该socket的IP地址和端口号。

另外更有一种结构类型:   
struct sockaddr_in
{   
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */   
struct in_addr sin_addr;/* IP地址 */   
unsigned char sin_zero[8]; /* 填充0 以保持和struct sockaddr同样大小*/   
};   
这个结构更方便使用。
sin_zero用来将sockaddr_in结构填充到和struct sockaddr同样的长度,能用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针能相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你能在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或相反。

 

来源: ChinaUnix博客  作者: ChinaUnix博客

原创粉丝点击