社区
网络编程
帖子详情
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
simon8383
2007-07-04 09:26:28
服务器和子客户在同一台机器上
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
...全文
1499
8
打赏
收藏
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
服务器和子客户在同一台机器上 当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后 调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
命令查看本机开放
端口
查看开放
端口
,判断木马的方法 当前最为常见的木马通常是基于TCP/UDP协议进行client端与server端之间的通讯的,既然利用到这两个协议,就不可避免要在server端(就是被种了木马的机器了)打开监听
端口
来等待连接。例如鼎鼎大名的冰河
使用
的监听
端口
是7626,Back Orifice 2000则是
使用
54320等等。那么,我们可以利用查看本机开放
端口
的方法来检查自己是否被种了木马或其它黑客程序。以下是详细方法介绍。
net
stat
的用法
net
stat
的用法详解,帮大家分析,有实例!
linux常用命令
linux常用命令 1、查看所有80
端口
的连接数: 2、对连接的IP按连接数量进行排序 3、查看TCP连接
状态
4、查看80
端口
连接数最多的20个IP
071204awk应用1
071204awk应用1
用DOS命令来查看好友的IP地址
用DOS命令来查看好友的IP地址
网络编程
18,358
社区成员
64,186
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章