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によって異なりますか?