作者在 2010-09-13 22:32:49 发布以下内容
int ConnectWithTimeout (SOCKET sock,struct sockaddr *addr,int addrlen,struct timeval *timeout)
{
int nRet = 0;
unsigned long nonblocking = 1;
unsigned long blocking = 0;
if(!timeout)
return connect(sock, addr, addrlen);
ioctlsocket(sock, FIONBIO, &nonblocking);
if(connect(sock, addr, addrlen) == SOCKET_ERROR)
{
fd_set writefds;
FD_ZERO(&writefds);
FD_SET(sock, &writefds);
if(select(0, NULL, &writefds, NULL, timeout) != 0)
{
if(FD_ISSET(sock, &writefds))
{
nRet = 0;
}
else
{
nRet = WSAETIMEDOUT;
}
}
else
{
nRet = WSAETIMEDOUT;
}
}
ioctlsocket(sock, FIONBIO, &blocking);
return nRet;
}