标题:
setsockopt() 函数中的 SO_LINGER 选项
[打印本页]
作者:
yuyang911220
时间:
2017-6-17 10:54
标题:
setsockopt() 函数中的 SO_LINGER 选项
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状态
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0