2012-01-20 9 views
1

私はLinux上で動作するC++で開発されたアプリケーションを持っています。このアプリケーションは起動時に特定のTCPソケットを開きます。しかし、接続が確立された状態でこのアプリケーションが強制終了されると、サーバー側のソケットはまだ閉じた状態(TIME_WAIT)のままです。オープン/ダングリングソケットを強制的に閉じる方法は?

私のアプリケーションは非常に再起動しているので、以前のクラッシュから閉じるのに60秒かかるポートをバインドすることはできません。

すべてのオープン/ダングリングソケットを強制的に閉じるシステムコールはありますか?私がバインドする前に、すべてのオープン/ダングリングソケットが閉じられ、バインディングが失敗しないようにすることができます。

ありがとうございました。

答えて

3

SO_REUSEADDRsetsockoptを使用して設定できます。それからすぐに縛ることができます。

int optval = 1; 
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
関連する問題