bind(listensock,(LPSOCKADDR)&addr,sizeof(addr))
在这句里面,LPSOCKADDR 是这样定义的 typedef struct sockaddr *PSOCKADDR;而sockaddr 是这样定义的 struct sockaddr {
u_short sa_family;
char sa_data[14];
而第一句中的addr是sockaddr_in结构类型的,而且是这样定义的 struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
而这句LPSOCKADDR)&addr也就是 (sockaddr)&sockaddr_in,两个字段的空间大小明显不一样啊,会不会装不下啊,这个是什么原理啊
第一次提问,请大家帮帮忙了
在这句里面,LPSOCKADDR 是这样定义的 typedef struct sockaddr *PSOCKADDR;而sockaddr 是这样定义的 struct sockaddr {
u_short sa_family;
char sa_data[14];
而第一句中的addr是sockaddr_in结构类型的,而且是这样定义的 struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
而这句LPSOCKADDR)&addr也就是 (sockaddr)&sockaddr_in,两个字段的空间大小明显不一样啊,会不会装不下啊,这个是什么原理啊
第一次提问,请大家帮帮忙了
{ char ch = 0x88; printf("%d\r\n", sizeof(sockaddr));
printf("%d", sizeof(sockaddr_in));
return 0;
}结果都是16;一样大,楼主放心用struct sockaddr {
u_short sa_family;
char sa_data[14];
};
这里的 sa_data[14] 就是为了保证一样大,用来占位用的
struct sockaddr {
u_short sa_family;
char sa_data[14]; }一共占2+14=16个字节
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];} 一共占2+2+4+8=16个字节
你怎么看出不一样呢?
只是sockaddr_in的信息更清晰一些