如何在关闭socket连接的时候跳过TIME_WAIT的等待状态

简介: 如何在关闭socket连接的时候跳过TIME_WAIT的等待状态

原因分析:

socket关闭之后并不会立即收回,而是要经历一个TIME_WAIT的阶段。windows下最多可以达到4分钟。在这个时候对这个端口进行重新绑定就会出错。

time_wait状态是一般有客户端的状态。而且会占用端口。有时产生在服务器端,因为服务器主动断开连接或者发生异常。

方式一:

设置 SO_REUSEADDR

if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
  return -1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) {
  close(fd);
  return -1;
}

方式二:

在closesocket的时候,使用setsockopt设置SO_DONTLINGER。

int z;     /* Status code*/ 
int s;       /* Socket s */
struct linger so_linger;
...
so_linger.l_onoff = TRUE;
so_linger.l_linger = 30;   // 30秒的超时时限
z = setsockopt(s,
    SOL_SOCKET,
    SO_LINGER,
    &so_linger,
    sizeof so_linger);
if ( z )
   perror("setsockopt(2)");

这l两种方式可以跳过TIME_WAIT的阶段,客户端重启后可以快速进行连接。通常使用这个设置来加强网络程序的健壮性。

相关文章
|
4月前
|
网络协议 开发者 Python
Python网络编程与Socket通信:连接世界的无限可能
在当今数字化时代,Python作为一种强大的编程语言,通过网络编程与Socket通信为我们打开了连接世界的无限可能。本文将深入探讨Python网络编程的基础知识、Socket通信的原理以及实际应用,帮助读者更好地理解并运用这一技术。
|
1月前
|
网络协议 安全 Python
python中socket客户端关闭连接
【4月更文挑战第7天】本教程介绍了如何在TCP客户端中正确关闭连接。使用`close()`方法可关闭Socket连接并释放资源,示例代码显示了在正常和异常情况下关闭连接的方法。注意异常处理以确保在任何情况下都能关闭连接,并避免并发操作同一Socket,以保证连接的稳定和安全。掌握这些技巧对编写健壮的TCP客户端至关重要。
|
5月前
|
Java Android开发
如何在Java中创建Socket连接?
如何在Java中创建Socket连接?
69 0
|
1月前
|
网络协议 安全 Java
python中socket关闭连接和释放资源
【4月更文挑战第6天】本教程讲解了网络通信后如何正确关闭连接和释放资源,以保证程序稳定性、性能及避免资源泄露和安全问题。内容涵盖TCP、HTTP连接关闭,数据库连接释放,以及内存、文件句柄、线程等资源管理。建议使用异常处理、遵循编程语言最佳实践,并定期审查代码以优化资源管理。
|
3月前
|
C++
C++实现Socket连接通信
C++实现Socket连接通信
13 1
|
4月前
C++socket客户端select异步连接发送接收数据
C++socket客户端select异步连接发送接收数据
27 0
|
8月前
|
移动开发 小程序 Android开发
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
71 0
|
网络协议 Unix Linux
腾讯三面:socket 优雅的关闭连接
close函数的作用是关闭套接字,并终止TCP连接。那终止连接之后,还在发送缓冲区的数据还能发送吗?接下来我们来看一下。
|
关系型数据库 MySQL Linux
Linux连接MySQL时的错误:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
连接本地的MySQL数据库引擎时候出现的错误。用mysql_error()函数获取到错误提示:
|
JavaScript
js实现socket连接
js实现socket连接
1132 0