VC6.0 winsockでサーバとクライアントの開発を行っています。
質問なのですが、クライアントでshutdown後closesocketを行うとサーバ、クライアント両方でソケットが使えなくなっていますが、
ネットワークが切断された状態のクライアントでshutdown後closesocketを行うとサーバのソケットが使えなくなるまでに数分時間がかかっているような動きをします。
これは普通なのでしょうか?これを回避できる方法はあるのでしょうか?
質問ばかりですが、わかる方がいましたら教えてください。
よろしくお願いします。
> ネットワークが切断された状態のクライアントでshutdown後closesocketを行うとサーバのソケットが使えなくなるまでに数分時間がかかっているような動きをします。
少し状況がつかみかねる部分があるのですが、このような状態でしょうか?
(1)サーバとクライアントがconnectされた状態にする
(2)ネットワークを切断する(LANケーブルを抜く?)
(3)クライアント側で、shutdownを行なう。
(4)クライアント側で、closesocketを行なう。
この場合サーバ側は、そのままではクライアント側からshoutdown等が行なわれたことがわかりませんが、
明示的にサーバ側でclosesocket()等を行なう必要がありませんか?
それとも、上記の後にサーバ側でsend()やrecv()等を行なっているということでしょうか?
LANケーブルが抜けた状態や存在IPアドレスに対してでsend()(recv()もだったかな?)を行なうと、
通信先を探しているようで、80秒程度send()から制御が返らなかったとはずです。
> サーバのソケットが使えなくなるまでに
が何を意味しているのか、これだけでは理解しかねる部分があり、
明確な回答が得られないような気がします。
サーバ側のソースを載せ、どの部分が時間がかかっているのかや、全体としての処理の流れと、
どの時点でネットワークが切断されたのか、またネットワークの切断とは何を意味しているのか?等を明確にして下さい。
TIME_WAIT 状態のことでしょうか。
http://www.geekpage.jp/programming/winsock/so_reuseaddr.php
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#time_wait
ツイート | ![]() |