重用已终止进程的 TCP 端口

重用已终止进程的 TCP 端口

我在 Linux 上有一个 TCP 服务器进程。它有时会被 杀死SIGKILL,之后它的父进程会重新启动它。我无法改变孩子被杀害的方式。有时(大约每 100 次一次)重启会失败,因为服务器端口仍在使用中(bind返回EADDRINUSE)。服务器显式设置的套接字选项是O_RDWRO_NONBLOCK TCP_NODELAY和。SO_REUSEADDRTCP_USER_TIMEOUT

我的问题是:

  1. 如果进程中具有非阻塞 TCP 套接字操作的进程被终止,则其缓冲区是否会被刷新并TIME_WAIT在其父进程获取之前放入端口SIGCHILD

  2. 当父进程获取SIGCHILD被杀死的子进程时,是否保证子进程使用的端口可以重用SO_REUSEADDR

  3. 此行为在不同的 Linux 内核和 Mac 上是否有所不同?

相关内容