• ベストアンサー

Winsockで接続待ちタイムアウトを設定する方法

現在、WinsockAPIを使ってソケット通信プログラムを作っています。  このプログラムの仕様の中で、接続待ちタイムアウトというものがあります。これはつまり、connect関数を実行してから応答が返ってくる(関数が値を返す)までの時間監視のことなのですが、そのような値をソケットに対して設定する手段というのはあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

あるとすれば、 setsockopt() で設定できるソケットオプションのどれかということになります。 明確に書かれているものはありませんが、もしかすると、送信タイムアウトの設定で効いてくるかも知れません。 なければ、 (1)ソケットをノンブロッキングにして、 (2)connect()の完了を、タイマを掛けることのできるselect()で待ち、 (3)自分のタイムアウトが先にやってきたら、ソケットを捨てて、タイムアウト処理をする。 connect()の結果がタイムアウトで完了してもなお自分のタイマに残りがあれば、残り時間分のタイマを掛けて(2)に戻る。 というような実装になるように思います。 回答になっておりませんが、参考まで。

__haruyama
質問者

お礼

setsockopt()のヘルプを見てみましたが、タイムアウトの設定はできないみたいですね。やはり設定したタイムアウトになるまでconnect()を呼びつづけるしかないようですね。 ありがとうございます。参考にさせていただきます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

前に調べたときに「connect()のTIMEOUT時間は変更できない」という結果になりました。 WinSock1.1とWinSock2.0です。 WinSock2.2では調べてません。 MSDNでは If the error code returned indicates the connection attempt failed (that is, WSAECONNREFUSED, WSAENETUNREACH, WSAETIMEDOUT) the application can call connect again for the same socket. となってます。 「TIMEOUT時間を長く取りたいならconnect()をループさせろ」ってことらしいですね。 いっそ非同期の方が楽かも?

すると、全ての回答が全文表示されます。
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは Windows3.1の頃はwinsock.dllと同じディレクトリにあるwinsock.iniファイルに定義するものだと思うのですが、今はどうしているのか解りません。

すると、全ての回答が全文表示されます。

関連するQ&A