WSADATA wsaData;
SOCKET sock;
struct fd_set mask;
struct timeval timeout;
unsigned long flag=1;
SOCKADDR_IN blah;
if (WSAStartup(MAKEWORD(1,1),&wsaData)) {
printf("Winsock Initialization failed.\n");
return -1;
}
blah.sin_family = AF_INET;
blah.sin_port = htons(80);
blah.sin_addr.s_addr= inet_addr("192.168.0.1");
sock = socket(AF_INET,SOCK_STREAM,0);
if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) {
printf("Can not create socket.\n");
return -2;
}
//设置套接字为非阻塞模式
if (ioctlsocket(sock,FIONBIO,&flag)!=0) {
printf("ioctlsocket error: %s\n",WSAGetLastError());
closesocket(sock);
return -3;
}
connect(sock,(struct sockaddr*)&blah,sizeof(blah));
timeout.tv_sec=3; // 超时限制为2秒
timeout.tv_usec=0;
FD_ZERO(& mask); //清空集合mask
FD_SET(sock,& mask); //将sockfd放入集合mask中
switch(select(sock+1,NULL,&mask,NULL,&timeout))
{
case -1: {
printf("select error!\n");
closesocket(sock);
return -4;
}
case 0: {
closesocket(sock);
printf("time out!\n");
return;
}//如果超时
轉自 : http://topic.csdn.net/t/20020428/16/686125.html