Netty 系统参数 SO_LINGER

SO_LINGER 含义

  • 关闭 Socket 的延迟时间,默认禁用该功能,socket.close() 方法调用后立即返回;

SO_LINGER 开启前后,socket.close() 返回时机对比

Netty 系统参数 SO_LINGER
SO_LINGER.png
开启前
  • socket.close() 调用后立即关闭进程,TCP 确认机制的包就无法到达;
开启后
  • socket.close() 至少等到 FIN 的 ACK 到达,相对就安全的多;

是否开启 SO_LINGER 的考量

  • SO_LINGER 其实是提高了可靠性;
  • 一般不开启,因为在 NIO 编程中,发送、读取包括关闭都是非阻塞的,如果开启 SO_LINGER,关闭操作就变慢了;
  • 大多数情况下,不会出现 FIN 的 ACK 回不来的情况;
  • 而且一般情况下,在调用了 socket.close() 之后不会把程序关闭,之后的包都是可以到达的;