Winsock c ++,程序冻结连接到脱机服务器

时间:2014-07-20 10:50:15

标签: c++ winsock

我的程序在尝试连接到脱机服务器时冻结,如果它在线,它不会这样做,我知道它正在尝试多次连接。

有没有办法在不阻塞主代码的情况下做到这一点?

我的连接功能

bool WSockClient::ConnectServer(int PortNumber, char *IP)
{
SetClientSockAddr(&sockAddr, PortNumber, IP);       // Settings

if((hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
    return false;


if(connect(hSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr)) != 0)     // Connect to                                     the server
    return false;

//cout << "Attempting to connect to " << inet_ntoa(sockAddr.sin_addr) << endl;

return true;
}

1 个答案:

答案 0 :(得分:3)

默认情况下,套接字将“阻塞”,这意味着某些调用(如connect)将阻止程序的执行,直到操作完成。在MS-Windows上,您可以将套接字更改为“非阻止”#39;使用ioctlsocket的电话。

对于非阻塞套接字,connect调用将立即返回,您必须使用select来确定连接是否成功。您可以找到一些其他信息here