SOCKADDR_IN的基本结构
在windows/linux下有下面结构:
sockaddr结构
struct sockaddr
{
unsigned short sa_family;/*addressfamily,AF_xxx*/
char sa_data[14];/*14bytesofprotocoladdress*/
};
sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族。
sa_data是14字节协议地址。
此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构
sockaddr_in(在netinet/in.h中定义): struct sockaddr_in{short sin_family;/*Address family一般来说AF_INET(地址族)PF_INET(协议族)*/unsigned short sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/struct in_addr sin_addr;/*IP address in network byte order(Internet address)*/unsigned char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/};(在ws2def.h中定义): struct sockaddr_in{ #if(_WIN32_WINNT<0x0600) short sin_family; #else//(_WIN32_WINNT<0x0600) address_family sin_family; #endif//(_WIN32_WINNT<0x0600) ushort sin_port; in_addr sin_addr; char sin_zero[8];}
(在WinSock2.h中定义): struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8];};
在linux下:
in_addr结构 typedef uint32_t in_addr_t;struct in_addr { in_addr_t s_addr; };在windows下: typedef struct in_addr{ union{ struct { unsigned char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { unsigned short s_w1,s_w2; } S_un_w; unsigned long S_addr; }S_un;}in_addr;更多参考:in_addr