首页/系统/Linux 内核与性能调优速查/SO_LINGER 与主动 RST 关闭
网络栈调优98 条

SO_LINGER 与主动 RST 关闭

SO_LINGER 控制 close 时未发送数据的行为: 超时归零可立即以 RST 关闭, 常规关闭则尽力发送。

C 用例

C 用例
struct linger lg = { .l_onoff = 1, .l_linger = 0 };
setsockopt(fd, SOL_SOCKET, SO_LINGER, &lg, sizeof(lg));
close(fd);
RST 关闭会丢弃发送缓冲中的未确认数据; 适合快速释放且业务可容忍丢失的场景。

易错点

  • 滥用 RST 关闭导致对端收错状态
  • 忽略未发送数据被丢弃的业务影响

数据来源与参考

  • man 7 socket
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌