SO_REUSEADDR
据《UNIX网络编程》卷一所说,此选项用于4种用途
我本人在TCP服务器上只处理过两种,其他情况如有需要,请参考《UNIX网络编程》卷一
1.引自《UNIX网络编程》卷一
多进程绑定同一对IP和PORT,按时序举个多进程模式tcp服务器的例子
a.父进程进行监听;
b.来syn包,请求连接;
c.派生子进程处理用户长连接请求;
d.父进程挂掉;
e.重启父进程。
此时,子进程复制继承父进程的监听socket,并且子进程并没有消亡,如果在监听前没有对监听socket设置此选项,重启父进程时,会导致bind调用失败。
2.先明确一个概念:socket是系统级的对象,并非属于某个进程自己的资源。
言归正传,不考虑多进程方式的tcp服务器,举个最简单的单进程+epoll方式的TCP服务器的例子
服务器进程挂掉(内核自动关闭所有此进程打开的文件,其中包括socket),监听socket进入TIME_WAIT状态(此时socket仍存在于系统中),重新启动服务器,如果在监听前没有对监听socket设置此选项,此时会导致bind调用失败。