[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:25407] Re: TCP のportが解放されるとき



大崎です。

http://www.csg.is.titech.ac.jp/~chiba/lecture/web/web01.html

に詳しい説明がありました。

> また、socket を close() しても、実は即座に socket が破棄されるわけではない。OSは送信した全てのデータを相手が正しく受信したことを確認しないと、socket を破棄できないからだ。このためサーバ側のプログラムを終了した後、すぐに再実行すると、bind() が「その port 番号は使用中です」というエラーを出して実行できないことがある。
> 
> これを避けるためには、常にサーバよりもクライアントのプログラムが先に socket を close() するようにすればよい。多くの Unix の実装でこの事がいえる。あるいはクライアントの方を先に終了させるようにしてもいい (プロセスが終了すると全ての I/O が close される)。
> 
> もし強制的にサーバの方から先に socket を close させるときは、close() の直前に
> 
> shutdown(s, 2);
> 
> を呼ぶとよい。s は socket の識別子、2は定数である。

shutdown()を呼んでいるようなので、これは当てはまりませんね。

> あるいはサーバ側で bind() する前にあらかじめ
> 
> int value = 1;
> setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
> 
> を実行しておいてもよい。

を実行してみたはどうでしょう?



-- 
/** OSAKI Yohei
 * @e-mail yoosaki@extensionpoint.jp
 */

References
[plamo:25404] Re: TCP のport が解放されるとき, Iqbal Abdullah
[plamo:25405] Re: TCP のportが解放されるとき, 早間

[検索ページ] [メール一覧]
Plamo ML 公開システム