我在 Linux 上有一个 TCP 服务器进程。它有时会被 杀死SIGKILL
,之后它的父进程会重新启动它。我无法改变孩子被杀害的方式。有时(大约每 100 次一次)重启会失败,因为服务器端口仍在使用中(bind
返回EADDRINUSE
)。服务器显式设置的套接字选项是O_RDWR
、O_NONBLOCK
TCP_NODELAY
和。SO_REUSEADDR
TCP_USER_TIMEOUT
我的问题是:
如果进程中具有非阻塞 TCP 套接字操作的进程被终止,则其缓冲区是否会被刷新并
TIME_WAIT
在其父进程获取之前放入端口SIGCHILD
?当父进程获取
SIGCHILD
被杀死的子进程时,是否保证子进程使用的端口可以重用SO_REUSEADDR
?此行为在不同的 Linux 内核和 Mac 上是否有所不同?