#include "winsock2.h"
#pragma comment(lib,"WS2_32.lib")
#include "stdio.h"
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2,0);
WSAStartup(sockVersion, &wsaData);
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
return -1;
}
//设置非阻塞方式连接
unsigned long ul = 1;
int ret = ioctlsocket(s, FIONBIO, (unsigned long*)&ul);
if(ret == SOCKET_ERROR) return -1;
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(81);
servAddr.sin_addr.S_un.S_addr = inet_addr("172.172.173.209");
connect(s,(sockaddr*)&servAddr,sizeof(servAddr));
//select 模型,即设置超时
fd_set r;
FD_ZERO(&r);
FD_SET(s, &r);
struct timeval timeout ;
timeout.tv_sec = 3; //连接超时3秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if(ret <= 0)
{
closesocket(s);
return -1;
}
//设回阻塞模式
ret = ioctlsocket(s, FIONBIO, (unsigned long*)&ul);
if(ret == SOCKET_ERROR){
closesocket(s);
return -1;
}
//设置发送超时6秒
int TimeOut = 6000;
if(setsockopt(s,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut)) == SOCKET_ERROR){
return 0;
}
//设置接收超时6秒
TimeOut = 6000;
if(setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut)) == SOCKET_ERROR){
return 0;
}
WSACleanup();
return 0;
}