首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

setsockopt() 函数中的 SO_LINGER 选项

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状态
继承事业,薪火相传
返回列表