私も同じ問題に遭遇しました。これは、ソケット自体ではなく、ソケットへの接続を閉じているためです。ソケットは TIME_WAIT 状態になり (すべてのデータが送信されたことを確認するため、可能であれば TCP が配信を保証します)、解放されるまで最大 4 分かかります。
または、非常に詳細な/技術的な説明については、このリンクを確認してください
確かに面倒ですが、バグではありません。 SO_REUSEADDR
の使用については、以下のこの回答に関する @Vereb のコメントを参照してください。 .
次のように netstat を試してください:netstat -ntp
、 -l
なし . TIME_WAIT
で TCP 接続が表示されます
質問が出されてからしばらく経ちましたが、解決策を見つけることができました:
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
これにより、すぐに再利用できるソケットが設定されます。
これが「間違っている」場合は申し訳ありません。私はソケットの経験があまりありません