Winapi 调整套接字连接调用超时

Winapi 调整套接字连接调用超时,winapi,sockets,timeout,connect,Winapi,Sockets,Timeout,Connect,在Win32环境中,有没有办法“调优”套接字connect()调用上的超时?具体来说,我想增加超时长度。正在使用的插座是非阻塞的。谢谢 是的,这是可能的 如果在之后处于非阻塞模式,则通常使用等待I/O就绪。此函数有一个用于指定超时值的参数,如果超时,将返回0。您可以尝试使用SO_RCVTIMEO和SO_sndtTimeo套接字选项设置任何套接字操作的超时。例如: struct timeval timeout; timeout.tv_sec = 10; timeout.tv_usec

在Win32环境中,有没有办法“调优”套接字
connect()
调用上的超时?具体来说,我想增加超时长度。正在使用的插座是非阻塞的。谢谢

是的,这是可能的


如果在之后处于非阻塞模式,则通常使用等待I/O就绪。此函数有一个用于指定超时值的参数,如果超时,将返回0。

您可以尝试使用SO_RCVTIMEO和SO_sndtTimeo套接字选项设置任何套接字操作的超时。例如:

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");
struct timeval超时;
timeout.tv_sec=10;
timeout.tv_usec=0;
if(setsockopt)(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)和超时,
sizeof(超时))<0)
错误(“setsockopt失败\n”);
if(setsockopt)(sockfd,SOL_SOCKET,SO_SNDTIMEO,(char*)和超时,
sizeof(超时))<0)
错误(“setsockopt失败\n”);
您也可以尝试alarm()。样本:

信号(信号,连接报警);/*连接报警是你的信号处理器*/
警报(秒);/*秒是以秒为单位的超时*/
如果(连接(fd、addr、addrlen)<0)
{
如果(errno==EINTR)/*超时,请执行以下操作*/
...
}
警报(0);/*取消警报*/

不,这是不可能的。默认连接超时可以减少,但不能增加。

否,这是不可能的。默认连接超时可以减少,但不能增加。接收和发送超时与连接超时无关。
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 */