我的程序在尝试连接到脱机服务器时冻结,如果它在线,它不会这样做,我知道它正在尝试多次连接。
有没有办法在不阻塞主代码的情况下做到这一点?
我的连接功能
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;
}
答案 0 :(得分:3)
默认情况下,套接字将“阻塞”,这意味着某些调用(如connect
)将阻止程序的执行,直到操作完成。在MS-Windows上,您可以将套接字更改为“非阻止”#39;使用ioctlsocket的电话。
对于非阻塞套接字,connect
调用将立即返回,您必须使用select
来确定连接是否成功。您可以找到一些其他信息here