大家看一下:
sockaddr_in multicastAddr;
ip_mreq multicastRequest;WSAStartup(MAKEWORD(2,2), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
multicastAddr.sin_family = AF_INET;     
multicastAddr.sin_addr.s_addr = htonl(INADDR_ANY);  
multicastAddr.sin_port = htons(18006);bind(sock, (sockaddr *) &multicastAddr, sizeof(multicastAddr));multicastRequest.imr_interface.s_addr = htonl(INADDR_ANY);
multicastRequest.imr_multiaddr.s_addr = inet_addr(“224.1.2.3”);setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&multicastRequest,sizeof(multicastRequest));
我开了两个线程,分别用上面这段代码连接两个IP不同的服务器,为什么,第一个线程可以没有问题的连上去,而第二个就在bind的时候出错。这两个线程谁做第二个谁出错,为什么啊,急,在线等!!!

解决方案 »

  1.   

    在第二个套接字上设置SO_REUSEADDR的选项!
      

  2.   

    SO_REUSEADDR在哪里设置啊,谢了setsockopt吗?
      

  3.   

    还有我试了一下,msdn上IPPROTO_IP层并没有SO_REUSEADDR属性啊,不过我还是在setsockopt中试了一下,还是不行啊
      

  4.   

    我又试了一下,在IPPROTO_IP层并没有SO_REUSEADDR属性,而在SOL_SOCKET层,用SO_REUSEADDR属性的话是可以的,不会引起bind错误,但是第一个线程就取不到数据了。
    我想应该是本地端口重新使用的问题,有没有什么办法指定一个空闲端口呢
      

  5.   

    bind是绑定本地端口,且同样的IP和端口是不能绑定多次的。