2008-11-12 60 views
2

有没有什么办法可以在Win32环境中“调整”套接字connect()调用的超时时间?具体来说,我想增加超时时间。使用的插座是非阻塞的。谢谢!调整套接字连接调用超时

回答

2

是的,这是可能的。

如果您在connect()之后处于非阻塞模式,则通常使用select()来等待I/O准备就绪。该函数有一个用于指定超时值的参数,并且在超时的情况下将返回0。

+0

不,这是不可能的。默认连接超时可以减少但不会增加。 – EJP 2013-10-09 00:23:50

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

接收和发送超时与连接超时无关。 – EJP 2013-10-09 00:24:54

0

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