Board logo

标题: 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