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,两个字段的空间大小明显不一样啊,会不会装不下啊,这个是什么原理啊
第一次提问,请大家帮帮忙了

解决方案 »

  1.   

    #include <winsock.h>int main(int argc, char* argv[])
    { 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] 就是为了保证一样大,用来占位用的
      

  2.   

    这里的sockaddr 和sockaddr_in 站的空间是一样大的
    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个字节
      

  3.   

    明明是一样的啊
    你怎么看出不一样呢?
    只是sockaddr_in的信息更清晰一些