【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

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

A 回答 (3件)

あるとすれば、


setsockopt()
で設定できるソケットオプションのどれかということになります。
明確に書かれているものはありませんが、もしかすると、送信タイムアウトの設定で効いてくるかも知れません。

なければ、
(1)ソケットをノンブロッキングにして、
(2)connect()の完了を、タイマを掛けることのできるselect()で待ち、
(3)自分のタイムアウトが先にやってきたら、ソケットを捨てて、タイムアウト処理をする。
connect()の結果がタイムアウトで完了してもなお自分のタイマに残りがあれば、残り時間分のタイマを掛けて(2)に戻る。
というような実装になるように思います。

回答になっておりませんが、参考まで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/03 17:13

前に調べたときに「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()をループさせろ」ってことらしいですね。

いっそ非同期の方が楽かも?
    • good
    • 1

こんにちは



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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A