如何设置connect超时时间
2017-08-29 11:06
417 查看
当网络设备不可用时,connect的链接会非常的耗时。
下面这篇文章解决了这个问题。
来源:https://www.codeproject.com/Tips/168704/How-to-set-a-socket-connection-timeout
文章名:How to set a socket connection timeout
Resolve long timeout
when connection
target is unavailable
Sometimes,
the connect time-out
can take too much time when
the target is unavailable. To resolve this issue, we can use non-blocking socket mode to select the timeout.
bool connect(char *host,int port, int timeout)
{
TIMEVAL Timeout;
Timeout.tv_sec = timeout;
Timeout.tv_usec = 0;
struct sockaddr_in address; /* the libc network address data structure */
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
address.sin_addr.s_addr = inet_addr(host); /* assign the address */
address.sin_port = htons(port); /* translate int2port num */
address.sin_family = AF_INET;
//set the socket in non-blocking
unsigned long iMode = 1;
int iResult = ioctlsocket(sock, FIONBIO, &iMode);
if (iResult != NO_ERROR)
{
printf("ioctlsocket failed with error: %ld\n", iResult);
}
if(connect(sock,(struct sockaddr *)&address,sizeof(address))==false)
{
return false;
}
// restart the socket mode
iMode = 0;
iResult = ioctlsocket(sock, FIONBIO, &iMode);
if (iResult != NO_ERROR)
{
printf("ioctlsocket failed with error: %ld\n", iResult);
}
fd_set Write, Err;
FD_ZERO(&Write);
FD_ZERO(&Err);
FD_SET(sock, &Write);
FD_SET(sock, &Err);
// check if the socket is ready
select(0,NULL,&Write,&Err,&Timeout);
if(FD_ISSET(sock, &Write))
{
return true;
}
return false;
}
下面这篇文章解决了这个问题。
来源:https://www.codeproject.com/Tips/168704/How-to-set-a-socket-connection-timeout
文章名:How to set a socket connection timeout
Resolve long timeout
when connection
target is unavailable
Sometimes,
the connect time-out
can take too much time when
the target is unavailable. To resolve this issue, we can use non-blocking socket mode to select the timeout.
bool connect(char *host,int port, int timeout)
{
TIMEVAL Timeout;
Timeout.tv_sec = timeout;
Timeout.tv_usec = 0;
struct sockaddr_in address; /* the libc network address data structure */
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
address.sin_addr.s_addr = inet_addr(host); /* assign the address */
address.sin_port = htons(port); /* translate int2port num */
address.sin_family = AF_INET;
//set the socket in non-blocking
unsigned long iMode = 1;
int iResult = ioctlsocket(sock, FIONBIO, &iMode);
if (iResult != NO_ERROR)
{
printf("ioctlsocket failed with error: %ld\n", iResult);
}
if(connect(sock,(struct sockaddr *)&address,sizeof(address))==false)
{
return false;
}
// restart the socket mode
iMode = 0;
iResult = ioctlsocket(sock, FIONBIO, &iMode);
if (iResult != NO_ERROR)
{
printf("ioctlsocket failed with error: %ld\n", iResult);
}
fd_set Write, Err;
FD_ZERO(&Write);
FD_ZERO(&Err);
FD_SET(sock, &Write);
FD_SET(sock, &Err);
// check if the socket is ready
select(0,NULL,&Write,&Err,&Timeout);
if(FD_ISSET(sock, &Write))
{
return true;
}
return false;
}
相关文章推荐
- 如何设置connect超时时间
- 设置connect超时时间
- 如何设置socket的Connect超时(linux)
- Python 2.x如何设置命令执行的超时时间实例
- 为tcp的connect设置超时时间
- 如何设置ASP.NET页面的运行超时时间
- dhclient在连不上dhcp server的时候,超时时间太长了如何设置
- WebLogic如何设置session超时时间
- 如何为session设置超时时间?
- 如何设置socket的Connect超时
- 如何设置WEB SERVICE超时时间
- 熟练掌握如何设置空闲超时时间.
- WebLogic如何设置session超时时间(转)
- 如何设置socket的Connect超时(linux)
- 设置connect超时时间
- 如何设置SSH服务中终端的超时时间或不超时
- WebLogic如何设置session超时时间
- 如何设置到映射网络驱动器的超时连接时间
- 如何设置socket的Connect超时
- 如何设置ASP.NET页面的运行超时时间