解决服务端socket异常断开后,端口号异常的问题

发布网友 发布时间:12小时前

我来回答

1个回答

热心网友 时间:12小时前

服务端遇到socket异常断开后,端口号出现TIME_WAIT状态,导致无法立即重新开启监听,此现象表现为_sock_err()返回错误值98。需寻找解决方案。

根据网络上的指导,调整内核文件

etc/sysctl.conf

内加入以下设置:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.ip_local_port_range= 10000 65000

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_keepalive_probes = 2

net.ipv4.tcp_keepalive_intvl = 2

执行

/sbin/sysctl -p

以使设置生效。尝试重启network服务,命令为

sudo /etc/init.d/network-manager restart

但问题并未解决。

最终在客户端和服务端代码中添加了socket属性SO_LINGER。问题得到了解决,经过多次实验,再也没有出现TIME_WAIT现象。具体是哪个设置起作用,不太清楚。日后再深入研究。

小提示:

使用netstat -ap | grep 21127查看指定端口号的状态。

使用netstat -ap查看当前用户下所有端口的使用情况。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com