リスニングソケットがバインドされていませんが、接続が開いているときにEADDRINUSEを取得する意味は何ですか?

リスニングソケットがバインドされていませんが、接続が開いているときにEADDRINUSEを取得する意味は何ですか?

親プロセスを完了しsocket/bind/accept、子プロセスを分岐し、親プロセスが接続を受け付けている間に通信できるように、そのソケットを開く親プロセスを検討してください。その後、親プロセスが終了します。

別のプロセスが同じポートで親プロセスがバインドされている同じアドレスにバインドしようとしましたが、EADDRINUSEエラーが発生します。

sshdただし、以下を使用してこのプロセスを完了すると、sshd はい閉じたポートに再バインドすることができ、他のプログラム(他のユーザーとして実行中)は再起動ウィンドウ中にEADDRINUSEを取得します(sshd親プロセスは実行されません)。

これの意味は何ですか?なぜ私はsshdリバインドできますが、他のユーザープロセスはできませんか?

netstat -a | grep PORTまた、子プロセスが実行されている間(他のプロセスを実行できない場合bind)、出力を介して唯一の接続はESTABLISHED1つで、状態は何もないことを確認できますLISTEN

ベストアンサー1

すべての意味を理解しているわけではありませんが(間違った場所を探しているか文書が不足しています)、特定の時間SO_LINGERに同じ詳細を使用して新しいソケットを開くことができるプロセスはないと思います。 )設定されていない場合は、接続ワードを閉じた後SO_REUSEADDR

私が理解したように、これは接続が閉じられた後に誰かが再接続するのを防ぐためであり、プロセスは以前のプロセスのために意図されたパケットを処理する必要があります。

man 7 socketこれは文書化されていないため、SO_REUSEADDR回答を把握することは困難です。

おすすめ記事