ソケット接続呼び出しタイムアウトの調整
質問
Win32環境で「チューニング」する方法はありますか?ソケット connect()
呼び出しのタイムアウト?具体的には、タイムアウトの長さを増やしたいと思います。使用中のソケットは非ブロッキングです。ありがとう!
解決
はい、これは可能です。
の後に非ブロックモードになっている場合 connect()
、通常は select()
を使用して、I / Oの準備が整うまで待機します。この関数には、タイムアウト値を指定するパラメーターがあり、タイムアウトの場合は0を返します。
他のヒント
SO_RCVTIMEOおよびSO_SNDTIMEOソケットオプションを使用して、ソケット操作のタイムアウトを設定することができます。例:
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
if (setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
sizeof(timeout)) < 0)
error("setsockopt failed\n");
if (setsockopt (sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,
sizeof(timeout)) < 0)
error("setsockopt failed\n");
alarm()を試すこともできます。サンプル:
signal( SIGALRM, connect_alarm ); /* connect_alarm is you signal handler */
alarm( secs ); /* secs is your timeout in seconds */
if ( connect( fd, addr, addrlen ) < 0 )
{
if ( errno == EINTR ) /* timeout, do something below */
...
}
alarm( 0 ); /* cancel the alarm */
いいえ、これは不可能です。デフォルトの接続タイムアウトは減らすことができますが、増やすことはできません。
所属していません StackOverflow