社区
网络编程
帖子详情
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
simon8383
2007-07-04 09:26:28
服务器和子客户在同一台机器上
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
...全文
1520
8
打赏
收藏
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
服务器和子客户在同一台机器上 当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后 调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
simon8383
2007-07-05
打赏
举报
回复
明白了。。结帖
mfc168
2007-07-05
打赏
举报
回复
导致的原因是在某一方close的时候,两方分别要发送和接受两个包:FIN,ACK,假如服务器关闭或者退出,造成客户地址和端口处于TIME_WAIT状态,如果被动方发送的FIN包没有被主动方收到,则处于CLOSE_WAIT状态
设置SO_LINGER套接字选项表示:从容关闭还是强行关闭?
l_onoff=1表示从容关闭,发送关闭fin包后,等待是否有没有发完的数据包,而等待的时间就是用l_linger来设置
linger m_sLinger;
m_sLinger.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
m_sLinger.l_linger = 0; // (容许逗留的时间为0秒)
setsockopt(sockConnected,
SOL_SOCKET,
SO_LINGER,
(const char*)&m_sLinger,
sizeof(linger));
我们避免不了WAIT状态冻结的再次出现,只能做到使影响降到最小,希望那个重用套接字选项能够使得下一次重新建立连接时可以重用那些处于WAIT状态的端口
僵哥
2007-07-05
打赏
举报
回复
首先设置Dont Linger为false,即打开Linger选项,使之相关设置生效,然后再把Linger的时间设置为0。
mfc168
2007-07-04
打赏
举报
回复
int nReuseOn=1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&nReuseOn, sizeof(nReuseOn));
将端口设置成可重用
simon8383
2007-07-04
打赏
举报
回复
怎么还得设置InternalLinger.l_onoff=1;啊?
Does not block close waiting for unsent data to be sent. Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero.
是不是我设置反了。。
反着设置貌似没问题了。
simon8383
2007-07-04
打赏
举报
回复
bool bDontLinger = false;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
int iRes=closesocket(s);
s=NULL;
return iRes;
问题依旧啊 怪异了啊 我看了msdn上写的 这个选项确实是 去掉TIMEWAIT的 可是我用了没效果
僵哥
2007-07-04
打赏
举报
回复
Close的时候设置SO_LINGER为0
//强行关闭一个socket
void ForceCloseSocket(SOCKET &s,bool bClose)
{
bool bDontLinger=false;
setsockopt(s,
SOL_SOCKET,
SO_DONTLINGER,
(char *)&bDontLinger,
sizeof(bool));
linger InternalLinger;
InternalLinger.l_onoff=1;
InternalLinger.l_linger=0;
setsockopt(s,
SOL_SOCKET,
SO_LINGER,
(const char*)&InternalLinger,
sizeof(linger));
if(bClose)
{
closesocket(s);
s=INVALID_SOCKET;
}
}
simon8383
2007-07-04
打赏
举报
回复
应该是bool bDontLinger = true吧?
不TimeWait = true
解决net
stat
TIME
_
WAIT
状态
过多问题
本文详细介绍了Linux系统中TCP连接的
TIME
_
WAIT
状态
,该
状态
可能导致资源浪费。当主动
关闭
连接的一方进入
TIME
_
WAIT
状态
并等待2MSL以确保旧连接的彻底结束,以防止旧数据包影响新连接。解决方案包括代码层面避免频繁建立和
关闭
连接,以及操作系统层面设置`net.ipv4.tcp_tw_reuse`和`net.ipv4.tcp_tw_recycle`参数以重用
端口
和加速
TIME
_
WAIT
连接的回收。此外,通过`net
stat
`命令可以查看当前TCP连接
状态
,帮助诊断和解决问题。
Windows命令--net
stat
--
使用
/教程/实例
net
stat
命令用于显示网络连接、路由表、接口统计等各类网络相关信息。在Windows系统中,例如`net
stat
-ano`可以查看所有
端口
的
使用
情况,包括监听(LISTENING)、
关闭
(CLOSING)、等待连接(
TIME
WAIT
)和已建立连接(ESTABLISHED)的
状态
。示例中展示了如何查看特定
端口
如8080的连接详情,这在排查网络问题或监控系统
状态
时非常有用。
linux net
stat
断开_linux下net
stat
--
time
rs / -o详解及keepalive相关
本文详细解析了如何
使用
net
stat
命令查看Linux系统的网络连接计时功能,包括keepalive、重发(retransmission)及
time
wait
等
状态
的含义与工作原理。
linux下net
stat
--
time
rs / -o详解及keepalive相关
本文详细介绍了Linux下
使用
net
stat
命令查看网络连接
状态
时,计时功能的具体参数及其含义,包括keepalive、on、off及
time
wait
等
状态
的工作原理。
Linux上常用命令、net
stat
命令、
端口
状态
,减少
Time
_
wait
的办法
本文详细介绍了如何在Linux系统中管理和操作防火墙,包括如何开启和
关闭
防火墙,以及如何统计网络
端口
的连接数、HTTPD协议连接数、已建立连接数,并提供了封禁高流量IP地址的方法。
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章