调整套接字连接调用超时

问题描述 投票:0回答:3

在 Win32 环境中是否有任何方法可以“调整”套接字

connect()
调用的超时?具体来说,我想增加超时长度。

使用的套接字是非阻塞的。

sockets winapi timeout
3个回答
2
投票

是的,这是可能的。

如果在

connect()
之后处于非阻塞模式,通常使用
select()
等待 I/O 准备就绪。该函数有一个参数用于指定超时值,超时时将返回 0。


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 */

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.