誰もが正しいです。ただし、コードのテストにも忙しい場合は、自分の アプリケーションが比較的迅速に開始および停止する場合、アプリケーションはまだソケットを「所有」している可能性があります。 SO_REUSEADDR をソケット オプションとして試してください:
<ブロック引用>SO_REUSEADDR は正確には何をしますか?
このソケット オプションは、このポートがビジー (TIME_WAIT 状態) であっても、先に進んで再利用することをカーネルに伝えます。ビジーであるが別の状態の場合でも、アドレスが既に使用されているというエラーが発生します。サーバーがシャットダウンされ、そのポートでソケットがまだアクティブなときにすぐに再起動する場合に役立ちます。予期しないデータが入ってくると、サーバーが混乱する可能性があることに注意してください。ただし、これは可能ですが、そうではない可能性があります。
「ソケットは 5 つのタプル (proto、localaddr、ローカル ポート、リモート アドレス、リモート ポート) です。SO_REUSEADDR は、ローカル アドレスを再利用できることを示しているだけです。5 つのタプルは依然として一意でなければなりません!」と指摘されています。 Michael Hunter 著 ([email protected])。これは事実であり、これが予期しないデータがサーバーに表示される可能性が非常に低い理由です。危険なのは、このような 5 タプルがまだネット上に浮かんでいて、跳ね回っている間に、同じシステム上の同じクライアントからの新しい接続がたまたま同じリモート ポートを取得することです。これについては、「2.7 TIME_WAIT 状態について説明してください。」で Richard Stevens が説明しています。
そのポートをすでに使用しているプロセスがあります。 netstat -tulpn
特定のポートを使用しているプロセス ID を見つけることができます。