3

編集:tl;dr:

間違ったオプションでソケットを開かないでください。うまくいかないでしょう!

元の質問:

クリーンなシャットダウンメカニズムを持たないプログラムを使用しています。終了するには、強制終了する必要があります。

次のようにソケットを開きます。

(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));

再利用アドレス オプションは、プログラムが停止した後に最終的にソケットが解放されるという点で機能しているようです。最終的には、数秒から数分程度になります。

このプログラムを定期的に再起動する必要があるため、これは非常に面倒です。プログラムを適切に終了させることは非常に大きな仕事ですが、ソケットを早期に解放するためにローカルでできることはあるのでしょうか?

4

1 に答える 1

5

ソケット オプションはビットではないため、論理和をとることはできませんSO_KEEPALIVE | SO_REUSEADDR。分かりやすく説明すると、SO_KEEPALIVE | SO_REUSEADDR別のソケット オプションが生成されますSO_NO_CHECK

の戻り値をチェックしていないため、この間違いに気づきませんsetsockopt。これで、戻り値を無視することが悪い習慣と見なされる理由がわかりました。

于 2013-09-17T15:44:31.337 に答える