如何修改TIME_WAIT状态的维持时间?

VCSQLVB 2008-11-27 12:10:56
我做服务端发现:
当客户连接超时后,服务端主动使用TransmitFile关闭连接时出现阻塞,查看MSDN发现是因为TCP处于TIME_WAIT状态引起的,阻塞大概持续240秒(windows默认的吧),大家知道怎样修改吗,让TIME_WAIT等待时间减小.

谢谢!
...全文
3181 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsdcnsdc 2008-12-15
  • 打赏
  • 举报
回复
SOCKET s;
int timeOut = 1000;
setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeOut, sizeof(timeOut));
TransmitFile(s, hFile,……
Derekfan 2008-12-10
  • 打赏
  • 举报
回复
學習了
simplebird 2008-12-02
  • 打赏
  • 举报
回复
这个问题当年我在csdn也问过,也没有满意的答复。
VCSQLVB 2008-12-01
  • 打赏
  • 举报
回复
始终还是觉得修改系统的东西不保险.
VCSQLVB 2008-12-01
  • 打赏
  • 举报
回复
确实没办法也只有使用closesocket了,然后另外创建新的socket.
dandelionl 2008-12-01
  • 打赏
  • 举报
回复
收藏
zidane_yubo 2008-12-01
  • 打赏
  • 举报
回复
学习了
derelictangel 2008-12-01
  • 打赏
  • 举报
回复
慢慢学习

PS:
我的目标是 ---->

^_^
weichen2005 2008-12-01
  • 打赏
  • 举报
回复
d
Eleven 2008-11-30
  • 打赏
  • 举报
回复
学习了,Up
blackeyhsi 2008-11-30
  • 打赏
  • 举报
回复
学习了
lzh9955 2008-11-29
  • 打赏
  • 举报
回复
up
僵哥 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 gzlucky 的回复:]
又是TIME WAIT的问题,在多年前我也碰到过,好象的确没有什么好解决的方法。

不过从你的情况来看,应该不是TIME WAIT的问题,而是 FIN-WAIT的问题。你可以在发生此情况时,用netstat -n来查看你这条连接的情况。通常TIME-WAIT只影响到,此连接双方的端口的再使用。

其实碰到对方故障,直接关掉此socket就行了,无需理会其关闭过程是否有问题。不过在后台的TCP/IP中会看到此连接一直异常,直接对方断线,或把此Socket 关掉…
[/Quote]
TIME_WAIT是正常的,这个主要是为了数据的安全起见,防止窜包。而FIN_WAIT,CLOSE_WAIT则属于异常状态。
僵哥 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 WinEggDrop 的回复:]
引用 2 楼 unsigned 的回复:
INIFile codeWindows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe
"TcpTimedWaitDelay"=dword:00000005


0x1E 0x12C ( 30–300 seconds)

5秒肯定不被接受,估计又会重置为240秒
[/Quote]
早先的时候MSDN并没有限制范围。不过新系统当中这似乎又不是太过重要(XP/VISTA等个人或工作站可能是个例外)

To prevent an application from creating a connection with the same set of socket addresses of a connection that is in a TIME-WAIT state, TCP/IP in Windows Server 2003 Service Pack 1 has implemented a smart TCP port allocation algorithm. When an application requests any available TCP port, TCP/IP first attempts to find an available port that does not correspond to a connection in the TIME-WAIT state. If a port cannot be found, then it picks any available port.
This new behavior makes it much more unlikely that an application will be assigned a TCP port that is in the TIME-WAIT state when connecting to the same destination. You no longer need to modify the TcpTimedWaitDelay registry entry.
yhy0611 2008-11-29
  • 打赏
  • 举报
回复
好像没有人知道怎么改呀
rightyeah 2008-11-29
  • 打赏
  • 举报
回复
up
itymx 2008-11-29
  • 打赏
  • 举报
回复
顶 顶 顶 顶 顶 顶 顶 顶 顶 建了个群 欢迎加入 群号:52993264
gzlucky 2008-11-29
  • 打赏
  • 举报
回复
又是TIME WAIT的问题,在多年前我也碰到过,好象的确没有什么好解决的方法。

不过从你的情况来看,应该不是TIME WAIT的问题,而是 FIN-WAIT的问题。你可以在发生此情况时,用netstat -n来查看你这条连接的情况。通常TIME-WAIT只影响到,此连接双方的端口的再使用。

其实碰到对方故障,直接关掉此socket就行了,无需理会其关闭过程是否有问题。不过在后台的TCP/IP中会看到此连接一直异常,直接对方断线,或把此Socket 关掉,有时候可能甚至对方断网了,还一直留着。

一个TCP连接,如果自己关闭了连接,而对方没有关闭,本方会看到FIN-WAIT,而对方的机器会看到CLOSE-WAIT。如果双方都成功关闭连接后,才会有TIME-WAIT。我说得还是比较粗略,简化了TCP连接关闭的过程,如果有兴趣,可以上网查看各个状态的描述,不过就是很容易给看晕。

我曾查看TIME-WAIT的解释,是用以防止此链路上还有数据未在中间的路由交换上传递完毕,所以在连接断开后一定时间内,仍保持状态,以让所有的路由交换都能真正确认连接要关闭,并不再传递当中的信息。
Huangyifei 2008-11-29
  • 打赏
  • 举报
回复
Down
gellf 2008-11-29
  • 打赏
  • 举报
回复
试下


struct linger {
u_short l_onoff;
u_short l_linger;
}


struct linger linger = { 1, 30};

setsockopt(serverSocket, SOL_SOCKET, SO_LINGER, (const char *) &linger, sizeof(linger));
加载更多回复(18)
课程以技术人的网络知识为中心和基线,通过基础理论篇、进阶拓展篇和实践练习篇三个部分的分解与层层递进,全面覆盖OSI七层模型与封装和解封装等网络通信核心思想、TCP协议、TCP三次握手与四次挥手过程原理、time-wait状态及连接过多处理等经典网络硬核基础知识,互联网、云计算与云原生时代下CDN、容器集群网络通信原理等进阶延伸知识,和以读懂/绘制拓扑图、网络诊断与调试命令、生产环境典型的网络故障处理、基于Wireshark和tcpdump进行常见环境尤其是容器环境(包括Docker和Kubernetes容器集群)下报文抓取及分析和分步法来分析并排除故障为代表的实践性知识。 课程大纲如下:课程的设计摒弃过于细分的网工专属的CCNA/CCNP等受众面小的路线,以互联网业界典型的技术岗对网络知识的共性需求为主线,理论联系实际,实践演示反哺验证理论,以突出实用性和可实践性为特色,让以往抽象、空洞的网络知识以接地气、看得见、能实际感知观测的方式来传授讲解,有图有真相,有作业有练习,有引导思考和相应解答,有模型有实践演示,还有众多生活中鲜活的举例。确保稍微具备一点基础背景的同学,都能听得懂、学得会、用得上,切实提升大多数技术岗(开发人员、测试人员、运维人员、架构师、解决方案架构师、售前顾问、技术支持工程师、技术客服人员等)的职场竞争力和个人影响力。 除了讲授知识模块本身,还有底层思想的剖析讲解和思维层面的发散引导,以帮助同学们构筑基础知识框架体系和技术性思维。课程同时融入微服务、CDN、TCP协议及通信原理、云原生与容器集群等互联网界刚需前沿性知识模块,并穿插进部分互联网界技术岗高频基础面试题及解答,以及典型的生产环境网络故障处理举例和少有地方讲解清楚的部分技术疑点和误区(如容器网络flannel的host-gw模式下节点是否必须在同一个二层网络,容器网络Calico中blackhole路由的作用,Calico中IP分配机制是否存在不足等),以最大程度上覆盖满足主要技术岗位对网络及其相关延伸知识的技能需求,确保同学们的学习能紧跟工作实际和主流技术趋势,学有所成、学有所值,并实实在在增加职场筹码。 学习本课程,可有效支撑同学们在物理机、虚拟机、云计算、容器集群、Server-less等不同基础设施环境下,以及单体架构、分布式架构、SOA架构、微服务架构、云原生架构等不同应用架构下,对底层网络基础及相关知识的实际需求运用。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧