sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系
来源:互联网 发布:淘宝只装无线瑞 编辑:程序博客网 时间:2024/06/06 07:35
转自:http://keendawn.blog.163.com/blog/static/88880743201241111620289/
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
sa_family是地址家族,是“AF_xxx”的形式。常设为“AF_INET”,代表Internet(TCP/IP)地址族。
sa_data是协议地址,由sa_family决定。如果sa_family=AF_INET,则sa_data就是sockaddr_in的sin_addr和sin_port。换句话说,这时sockaddr可以当作sockaddr_in看。
struct sockaddr_in {
short int sin_family; // Address family
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
struct in_addr {
unsigned long s_addr; // that’s a 32-bit long, or 4 bytes
};[::备注1]
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
在 in_addr结构体中,s_addr按照网络字节顺序存储IP地址。
sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr类型时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。
想来你是要进行网络编程,使用socket, listen, bind等函数。你只要记住,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。
/*实际上在Winsock2.h中查看in_addr*/
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr
/* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2
/* host on imp */
#define s_net S_un.S_un_b.s_b1
/* network */
#define s_imp S_un.S_un_w.s_w2
/* imp */
#define s_impno S_un.S_un_b.s_b4
/* imp # */
#define s_lh S_un.S_un_b.s_b3
/* logical host */
};
***************************/
- sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系
- sockaddr、sockaddr_in、struct in_addr的区别联系
- sockaddr_in sockaddr in_addr区别联系
- sockaddr_in sockaddr in_addr区别联系
- sockaddr_in & sockaddr & in_addr 的区别
- sockaddr_in , sockaddr , in_addr的区别
- sockaddr_in sockaddr in_addr区别联系[转]
- sockaddr_in sockaddr in_addr区别联系[转]
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别 .
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- iostream与iostream.h的区别
- 使用ActivityGroup来切换Activity和Layout
- 一个不错的视频网站
- ASP.NET 表单验证实现浅析
- flash builder 4 编译器参数
- sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系
- 大话设计模式
- 一。关键的应用服务器和交易处理产品
- iOS ARC环境下dealloc的使用
- PHPExcel使用的常用说明以及把PHPExcel整合进CI框架
- 程序员应具备的东西
- oracle中的SGA和PGA
- 6.16开发者日:微云张礼镜讲述韩国推广渠道
- lua函数的学习