Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527450
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3824
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-27 00:06
个人简介

一直从事高性能高并发服务器研究

文章分类

全部博文(28)

文章存档

2013年(28)

分类: LINUX

2013-09-03 01:40:48

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

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