此属性用于设置某个端口是否允许重用。这个属性的用处在那里呢?当我们编写程序时监听了一个端口,但是由于某种情况,服务器程序关闭或者一场退出。造成本地端口出现TIME_WAIT状态时。这是当我们继续监听此端口时就会出现错误。这是设置这个属性就显得非常重要。当我们设置了这个属性以后就可以继续对此端口进行监听。
但是这就引出了另外的一个问题,就是设置这个属性后允许一个套接字上同时有两个应用程序进行监听,那系统究竟会将数据发送给哪一个程序呢?系统会将数据首先交给监听IP最确定的应用程序。例如应用程序A在调用监听函数时设置的属性是addr.sin_addr.S_addr := INADDR_ANY;而另外的一个应用程序B则监听的地址为addr.sin_addr.S_addr := inet_addr(PChar(sMainIP));同时这两个应用程序监听的端口都是相同的,这是系统接收到数据后会首先交给B然后再交给A。因此一般为了程序安全我们会禁止这种情况的发生。因此需要设置下面的SO_EXCLUSIVEADDRUSE属性。
Delphi和C++的设置方法为:
本文转自狗窝博客51CTO博客,原文链接http://blog.51cto.com/fxh7622/516374如需转载请自行联系原作者
fxh7622