标题:setsockopt() 函数中的 SO_LINGER 选项
只看楼主
madfrogme
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
 问题点数:0 回复次数:0 
setsockopt() 函数中的 SO_LINGER 选项
一个典型的关闭SO_LINGER选项的原因就是避免最終大量的连接处于TIME_WAIT 状态,

从而消耗掉服务器的可用资源,致使新的請求不被接受。

当一个TCP 连接正常关闭时, 发起关闭的一方(active close)发送FIN,

并会在接下来的几分钟内 处于TIME_WAIT 状态,

这会导致大量的很短生存周期的连接存在于系统中导致问题。

当SO_LINGER关闭后,timeout 被設定为0,

 TCP栈不会去等待还没有发送出去的数据,而是直接发送RST,

这也会使得TCP 连接产生一个错误。

其实一个比较理想的关闭连接的方法是,设计你的程序协议,

使得服务器要求客户端发起关闭,调用close().

如果要说什么时候使用SO_LINGER选项,

比如用户的错误行为,超时、 返回了一个错误数据时, 都可以设置SO_LINGER

从而避免使连接最終沦为CLOSE_WAIT 和 TIME_WAIT状态

搜索更多相关主题的帖子: active close 
2012-11-13 22:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386966-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.307014 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved