2008-11-12 57 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

不,這是不可能的。默認連接超時可以減少,但不會增加。