Socket ms = WSASocket(AF_INET6, SOCK_RAW, IPPROTO_IP, NULL, 0 ,WSA_FLAG_OVERLAPPED);
bind(ms, (SOCKADDR *)&sa, sizeof(sa));
死活绑定不了,报错说参数无效,可是各参数的值都正确啊!!
请高手们赐教!!!!!!!!!!!!!!!!!!!在线等!!!!!急!!!!!!!!!

解决方案 »

  1.   

    v6也是用sockaddr?忘记了,感觉好像不是
      

  2.   

    sa的定义你最好用这个
    SOCKADDR_STORAGE sa;
    而不是用原来的
    sockaddr_in 
      

  3.   

    SOCKADDR_IN6 sa;
    in6_addr bestlocalIP;  //存放IPV6地址
    sa.sin6_family = AF_INET6;
    sa.sin6_port = htons(5002);  //端口号随便设置的
    sa.sin6_addr = bestlocalIP;  
      

  4.   

    sa没用 sockaddr_in,用的是SOCKADDR_IN6,如果用SOCKADDR_STORAGE,我就初始化了ss_family一个成员变量,其他变量好象是系统给,可bind的时候也还是报错,同样是参数无效!!!
      

  5.   

    typedef struct sockaddr_in6 {
      ADDRESS_FAMILY  sin6_family;
      USHORT  sin6_port;
      ULONG  sin6_flowinfo;
      IN6_ADDR  sin6_addr;
      union {
        ULONG  sin6_scope_id;
        SCOPE_ID  sin6_scope_struct; 
      };
    } SOCKADDR_IN6, *PSOCKADDR_IN6;
    这是这个结构,你的sin6_flowinfo有没有赋值?看你的代码好像没有赋值。
    这是msdn中要求的:
    All of the data in the SOCKADDR_IN6 structure, except for the address family, must be specified in network-byte-order (big-endian).除了family,剩下的都要指定