Socket参数说明-SO_REUSEADDR

SO_REUSEADDR 套接字选项:使两个server socket可以监听同一个端口 默认情况下,套接字不同一个正在使用的本地地址绑定到一起。但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用。通过第7章的学习,大家已经知道,每个连接都是通过它的本地及远程地址的组合,“独一无二”地标识出来的。针对我们想要连接的地址,只要能用极其细微的差异(比如T C P / I P中采用不同的端口号),来维持这种“独一无二”或者“唯一”的特点,绑定便是允许的。唯一例外的是监听套接字。两个独立的套接字不可与同一个本地接口(在T C P / I P的情况下,则是端口)绑定到一起,以等待进入的连接通知。 假定两个套接字都在同一个端口上进行监听,那么到底由谁来接收一个进入连接通知呢?对于这个问题,目前尚无一种正式规范提出了解决方案。在T C P的环境下,假如服务器关闭,或异常退出,造成本地地址和端口均进入T I M E _ WA I T状态,那么S O _ R E U S E A D D R 这个套接字选项便显得非常有用。在T I M E _ WA I T状态下,其他任何套接字都不能与那个端口绑定到一起。但假若设置了该选项,服务器便可在重新启动之后,在相同的本地接口及端口上进行监听。 将服务端socket套接字设置上SO_REUSEADDR属性,代码如下: //设置socket套接字的属性:允许多个设备在同一个本地网中监听同一下端口 int one = 1; if (sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) { printf("setsockopt SO_REUSEADDR error\n"); close(sock); return; } 这么设置套接字的作用是:允许两个server端的套接字在同一个本地网段中监听同一个端口.

你可能感兴趣的:(C++,c,socket,C#)