Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219657
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 144
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-03 21:00
文章分类

全部博文(35)

文章存档

2016年(2)

2015年(17)

2014年(16)

我的朋友

分类: LINUX

2015-05-27 10:19:49

原文地址:TCP选项之SO_REUSEADDR 作者:weizhulinux

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调用失败。

阅读(2333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~