レコバと申します。
WinSockのConnect関数について疑問があります。
どなたかご教授願えませんでしょうか。
あるマシン(IP XXX.XXX.XXX.XX)に対し、
WinSockのConnect関数をもちいて接続処理を行う際、
LANケーブルが抜けていた場合、関数は応答を返すまで
20秒ほどかかってしまいます。
WinSockのConnect関数はソケットエラー10060
(接続を試みたが、時間切れで、接続を確立できなかった。)
を返しているようですが、これだけ時間がかかってしまうというのは
正常な動作と考えてよろしいのでしょうか。
以上、ご解答よろしくお願いいたします。
タイムアウトで終わっているので正常動作だと思いますが。
本当にそうか調べるのであれば、
setsockopt
でタイムアウト値を設定して実行してみてはどうでしょうか?
動作自体は正常に動いているようです。
ですが指定したIPによって関数の応答時間が変わる
ような感じなんです。
例えば、XXX.XXX.XXX.XXのソケットエラー応答が20sかかるのに対し、
..***.**のソケットエラー応答は1sかかりません。
何か検索処理などが走るのでしょうか?
ケーブルが抜けているのを検出する方法というのがありましたが、これでしょうかね?
> http://xcorp.saposen.com/AD2002/9
PowerPoint のスライドですが。
テキストにすると
> ret_code = ::GetIfTable( ( PMIB_IFTABLE )if_table, &tab_size, FALSE );
> if_row = &( if_table->table[ idx ] );
> printf( Cable Status : %d\n, if_row->dwOperStatus );
だそうです。
ごめんリンク切れてる。
こっちで。
> http://xcorp.saposen.com/AD2002/Win32_Network_Programming_Tips.ppt#9
一番肝心なことを書いてなかったヨ
if_row->dwOperStatus が
MIB_IF_OPER_STATUS_CONNECTED または
MIB_IF_OPER_STATUS_OPERATIONAL のどちらかのとき
ケーブルがつながっているんだそうな。
連カキごめん。