18,356
社区成员
发帖
与我相关
我的任务
分享
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == s)
{
printf("create a socket error!\n");
WSACleanup();
return -1;
}
// 设置为非阻塞
int nRet = 0;
u_long lRet = 1;
nRet = ioctlsocket(s, FIONBIO, &lRet);
if (SOCKET_ERROR == nRet)
{
printf("set socket error!\n");
closesocket(s);
WSACleanup();
return -1;
}
sockaddr_in servAddr;
ZeroMemory(&servAddr, sizeof(servAddr));
servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.131");
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(5555);
// 非阻塞连接
int sAccept = connect(s, (sockaddr*)&servAddr, sizeof(servAddr));
if (SOCKET_ERROR == sAccept)
{
DWORD dwLastErr = WSAGetLastError();
if (WSAEWOULDBLOCK == dwLastErr)
{
printf("connecting......\n");
}
}
// 设置连接超时为5秒
fd_set fdWrite;
FD_ZERO(&fdWrite);
FD_SET(s, &fdWrite);
timeval time;
time.tv_sec = 5;
time.tv_usec = 0;
nRet = select(0, NULL, &fdWrite, NULL, &time);
if (SOCKET_ERROR == nRet)
{
printf("select socket error!\n");
closesocket(s);
WSACleanup();
return -1;
}
// 检查是否连接成功
if (!FD_ISSET(s, &fdWrite))
{
printf("connect error!\n");
closesocket(s);
WSACleanup();
return -1;
}
printf("connect ok!\n");
// 设置为阻塞
lRet = 0;
nRet = ioctlsocket(s, FIONBIO, &lRet);
if (SOCKET_ERROR == nRet)
{
printf("set socket error!\n");
closesocket(s);
WSACleanup();
return -1;
}