TIME_WAIT状态下,修改socket选项后,bind端口会失败

TIME_WAIT状态下,修改socket选项后,bind端口会失败,即使使用的是SO_REUSEADDR或者SO_REUSEPORT模式

*********************************

tcp        0      0 127.0.0.1:81                127.0.0.1:56850             TIME_WAIT

*********************************

tcp        0      0 127.0.0.1:81                127.0.0.1:56850             TIME_WAIT

*********************************

tcp        0      0 127.0.0.1:81                127.0.0.1:56850             TIME_WAIT

*********************************

tcp        0      0 127.0.0.1:81                127.0.0.1:56850             TIME_WAIT

如上,进程退出后,只要还有TIME_WAIT存在(2MSL后才消失),切换socket选项去bind端口都不会成功,比如SO_REUSEADDR和SO_REUSEPORT两个模式变化切换。

解决方法就是把tcp_timestamp,tcp_reuse,tcp_recycle三个变量全部设置为1,这样TIME_WAIT在进程退出后会迅速回收。

时间: 2024-08-05 23:39:50

TIME_WAIT状态下,修改socket选项后,bind端口会失败的相关文章

高并发状态下修改数据库的操作

在高并发状态下,尤其数据在频繁修改的状态下,很可能出现脏数据,也有可能造成脏读,不可重复读等问题,那么怎么解决这种问题呢,其实解决方式有很多中,我们探讨出来的结果是,在频繁修改的表里面添加一个时间戳或者随机数的字段,例如,timestamp. 原理是当每一次修改数据的时候都要把之前的时间戳修改成当前的时间戳,并且之前的时间戳要作为where条件,如果之前的时间戳和参数里面的时间戳不一致,则修改失败,在重新查询进行反复操作,上代码: try {  if (count>5) {    return 

关于Centos7无法连接网络,安装tree命令及修改ONBOOT选项后退出的程序!

之前使用的是Ubuntu,后来换成了Centos7,创建了目录之后想tree一下看看树目录,但是发现没有tree这个命令,和Ubuntu一样需要安装,之前Ubuntu安装tree是输入命令:#apt-get install tree就可以了,但是Centos7不一样,需要使用命令:#yum -p install tree就可以直接安装了,但是我安装一直失败,后来才发现是没有网络的原因- -,尴尬,哈哈:如果有小伙伴安装失败,可以去命令:ping www.baidu.com 试试有没有反应,如果P

Ubuntu下输入su - [root]后提示“su:认证失败”

Ubuntu下,进行用户到管理员切换时,使用命令su - 时,提示输入的是root密码,而在Ubuntu下root的密码起始是随机生成的(后续可由用户自己设置),且ubuntu下只能调用root,不能直接以root登录.所以直接用su 是不管用的,但可以用命令sudo su -,因为sudo调用的就是用户密码. 解决方法:sudo su -

tcp四次挥手中的time_wait状态、端口号的分类以及端口分类

TCP四次挥手 Tcp四次挥手,time_wait状态是在服务器给客户端发送Fin中断请求的时候,客户端处于的状态, 根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态.TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒.TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导

TCP/IP详解--TCP连接中TIME_WAIT状态过多

转载自http://blog.csdn.net/yusiguyuan/article/details/21445883 TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的.仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT.服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题.如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT. 原则

好一个Time_Wait状态(TCP/IP)

首先简单介绍一下Time_Wait是个什么鬼: 在TCP/IP协议中,我们都知道有三次握手四次挥手的过程,先来一个简单的图: 各个状态和基本的过程想必了解过TCP/IP协议的人都清楚,本次介绍的主题只有Time_Wait状态.(Ps:本文统一将主动断开连接方称A,被动断开连接方称B) 1,Time_Wait状态是什么结点产生的? 在A发送Fin被B接收到,B会发送ACK紧接着发送Fin以后,A接收到另一方发过来的Fin信号,就会将自身的状态设置为Time_Wait状态,并返回一个ACK. 2,为

TCP连接中的TIME_WAIT状态

转自:http://blog.csdn.net/sunnydogzhou/article/details/6572071 1 TCP关闭时的四次握手Tcp连接在关闭的的时候,执行的是一个四次握手的过程,下图是客户端发起的关闭时客户端和服务器的状态转换图 具体过程如下:1. 客户端发送FIN报文段,进入FIN_WAIT_1状态.2. 服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态.3. 客户端收到FIN的确认报文段,进入FIN_WAIT_2状态.4. 服务器端发送FIN

ListView在编辑状态下不能获取修改后的值,无法更新数据

ListView在编辑状态下不能获取修改后的值,获取到的总是以前的值解决方法:在page_load事件里写: if(!IsPostBack) { ListViewBind(); } 原因:这涉及到aspx页各事件的执行顺序,因为如果没有判断IsPostBack,每次点更新时page_load都会去执行ListViewBind(),对ListView进行重新绑定,那你再去获取ListView里的值时当然就是以前的值了,这样写后ListView没有被重新绑定,里面的数据就还是以前的,所以就可以获取到

网络编程Socket之TCP之TIME_WAIT状态详解

下面我们用最简单的一对一的客户服务器模型来重现编程中遇到的一些问题: 初学socket的时候在编写socket程序的时候会遇到很多莫名其妙的问题,比如说bind函数返回的常见错误是EADDRINUSE 使用下面的程序重现这个状态: client: int main(int argc, const char * argv[]) { struct sockaddr_in serverAdd; bzero(&serverAdd, sizeof(serverAdd)); serverAdd.sin_fa