ソケット_バインド()を避けてすぐにポートに接続する方法:アドレスをバインドできませんか?

ソケット_バインド()を避けてすぐにポートに接続する方法:アドレスをバインドできませんか?

TCP / IPポートから読み取る必要があるコードを実行すると、しばしば次のメッセージが表示されます(使用されている言語によって異なります)。

socket_bind(): unable to bind address

他のプロセスがこのポートを受信/バインドするときにこれが発生することがわかっているので(正確な説明フレーズはわかりません)、私のコードはそのポートを受信できません。しかしそれは私のコード(CTRL-C経由で)このポートをブロックするのをやめました!若干の時間制限があるようです。しばらく(約30秒)待ってからコードを起動して、問題なくこの特定のポートをリッスンできます。

私は知りたいです:

  • コードを停止した後でもポートがブロックされ続けるのはなぜですか?
  • コードを再起動してこのポートでリッスンを開始できるように、システムがこのポートを強制的に無効にするにはどうすればよいですか。

ベストアンサー1

C / C ++について話しているとし、setsockopt()を使用してくださいSO_REUSEADDR。ポートをリッスンするアクティブなプロセスがない場合は、再利用できます。

編集:まだ機能する理由は、ソケットを正しく閉じていないためです。 Control-Cはそれを殺します。netstatこれを使用して、開いているポートまたは完全に閉じていないポートを確認できます。

http://www.beej.us/guide/bgnet/output/html/multipage/setsockoptman.html

https://stackoverflow.com/questions/9207781/error-in-bound-port-address-already-in-use-tcp-socket-programming-in-unix

https://stackoverflow.com/questions/10071107/rebound-a-port-to-datagram-socket-on-a-difftent-ip

おすすめ記事