我现在只知道有两用途:
  1.设置了它就可以在一个进程中多次调用Bind()函数
  2.当服务器重起后连接依然有效.
  我的理解正确么,还有其它的吗,能对它们解释一下么?

解决方案 »

  1.   

    参考WINDOWS 网络编程技术1. 可以对一个端口进行多次绑定,一般这个是不支持使用的;
    2. 对于监听套接字,比较特殊。如果你定义了SO_REUSEADDR,并且让两个套接字在同一个端口上进行接听,那么对于由谁来ACCEPT,就会出现歧义。如果你定义个SO_REUSEADDR,只定义一个套接字在一个端口上进行监听,如果服务器出现意外而导致没有将这个端口释放,那么服务器重新启动后,你还可以用这个端口,因为你已经规定可以重用了,如果你没定义的话,你就会得到提示,ADDR已在使用中。
      

  2.   

    我用在多播的时候,也经常使用SO_REUSEADDR,也是为了防止机器出现意外,导致端口没有释放,而使重启后的绑定失败
      

  3.   

    TO: wxzfox(乐乐) 很感谢!
       明白一些,你是说如果未设置SO_REUSEADDR, 重启后,由于端口没有释放导致绑定失败.
       这样想问一下,设置SO_REUSEADDR后可在同一端口绑定两次以上么?
       如:
          SOCKET BindSocket1,BindSocket2.;      struct sockaddr_in  MyAddress;
          MyAddress.sin_family =AF_INET;
          MyAddress.sin_addr.sin_addr=strMyAddress;
          MyAddress.sin_port =htonl(MyPort);      Bind(BindSocket1,(strunct socketaddr*)MyAddress,sizeof(MyAddress))
          Bind(BindSocket2,(strunct socketaddr*)MyAddress,sizeof(MyAddress))      Listen(BindSocket1,5);
          Listen(BindSocket2,5);
          ....
          这样可以么,有问题或是要注意的地方?