親プロセスを完了しsocket/bind/accept
、子プロセスを分岐し、親プロセスが接続を受け付けている間に通信できるように、そのソケットを開く親プロセスを検討してください。その後、親プロセスが終了します。
別のプロセスが同じポートで親プロセスがバインドされている同じアドレスにバインドしようとしましたが、EADDRINUSEエラーが発生します。
sshd
ただし、以下を使用してこのプロセスを完了すると、sshd
はい閉じたポートに再バインドすることができ、他のプログラム(他のユーザーとして実行中)は再起動ウィンドウ中にEADDRINUSEを取得します(sshd親プロセスは実行されません)。
これの意味は何ですか?なぜ私はsshd
リバインドできますが、他のユーザープロセスはできませんか?
netstat -a | grep PORT
また、子プロセスが実行されている間(他のプロセスを実行できない場合bind
)、出力を介して唯一の接続はESTABLISHED
1つで、状態は何もないことを確認できますLISTEN
。
ベストアンサー1
すべての意味を理解しているわけではありませんが(間違った場所を探しているか文書が不足しています)、特定の時間SO_LINGER
に同じ詳細を使用して新しいソケットを開くことができるプロセスはないと思います。 )設定されていない場合は、接続ワードを閉じた後SO_REUSEADDR
。
私が理解したように、これは接続が閉じられた後に誰かが再接続するのを防ぐためであり、プロセスは以前のプロセスのために意図されたパケットを処理する必要があります。
man 7 socket
これは文書化されていないため、SO_REUSEADDR
回答を把握することは困難です。