プロセスがsegfaultで終了した場合、ソケットはどうなりますか?

プロセスがsegfaultで終了した場合、ソケットはどうなりますか?

リモートクライアントに接続するためのTCPソケットを持つサーバーがあると想像してください。 segfaultによってサーバーがシャットダウンすると、オペレーティングシステムによってソケットが閉じられ、クライアントはRSTを介してそれを通知します。それとも、クライアントはまったく知らず、クライアントとサーバーシステムの両方でソケットが開いたままになりますか?

ベストアンサー1

プロセスがデバッガにあり、segfaults がある場合、または segfault シグナルがキャプチャされると、技術的にプロセスは終了せず、すぐにソケットに何も起こりません。

しかし、プロセスが実際に終了すると、segfault条件は特に特別ではなく、shutdown(2)システムコールと同様に、プロセスが他の方法で終了したかのようにソケットの一方の端が閉じられます。

ソケットのカーネルバッファにデータがある場合、そのデータは排水される可能性があります。 (ただし、STDIOバッファに書き込まれていないデータは失われる可能性があります)。

おすすめ記事