sockaddr_in
SOCKADDR_IN是windows/linux下的数据结构。
基本信息
- 外文名
sockaddr_in
- 平台
windows、linux
基本结构
在windows/linux下有下面结构:
sockaddr结构
1 2 3 4 | structsockaddr{ unsignedshortsa_family;/*addressfamily,AF_xxx*/ charsa_data[14];/*14bytesofprotocoladdress*/ }; |
sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族。
sa_data是14字节协议地址。
此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构
sockaddr_in(在netinet/in.h中定义):
1 2 3 4 5 6 | structsockaddr_in{ shortsin_family;/*Addressfamily一般来说AF_INET(地址族)PF_INET(协议族)*/ unsignedshortsin_port;/*Portnumber(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/ structin_addrsin_addr;/*Internetaddress*/ unsignedcharsin_zero[8];/*Samesizeasstructsockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/ }; |
(在ws2def.h中定义):
1 2 3 4 5 6 7 8 9 10 | structsockaddr_in{ #if(_WIN32_WINNT<0x0600) shortsin_family; #else//(_WIN32_WINNT<0x0600) ADDRESS_FAMILYsin_family; #endif//(_WIN32_WINNT<0x0600) USHORTsin_port; IN_ADDRsin_addr; CHARsin_zero[8]; } |
在linux下:
in_addr结构
1 2 3 | typedefstructin_addr{ unsignedlongs_addr; }; |
在windows下:
1 2 3 4 5 6 7 | typedefstructin_addr{ union{ struct{unsignedchars_b1,s_b2,s_b3,s_b4;}S_un_b; struct{unsignedshorts_w1,s_w2;}S_un_w; unsignedlongS_addr; }S_un; }IN_ADDR; |
更多参考:in_addr
参数说明
sin_family指代协议族,在socket编程中只能是AF_INET