我正在为客户端套接字使用以下代码
int ConnectToServerSocket
(
char* _serverIP, //in
char* _serverPort, //in
SOCKET& _connectedSocket //out
)
{
struct addrinfo *addrResult = NULL,hints;
ZeroMemory(&hints, sizeof (hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_family = AF_UNSPEC;
int result = 0;
if (getaddrinfo(_serverIP, _serverPort, &hints, &addrResult))
{
int err = WSAGetLastError();
return err;
}
_connectedSocket = socket(addrResult->ai_family, addrResult->ai_socktype, addrResult->ai_protocol);
if (_connectedSocket == INVALID_SOCKET)
{
int err = WSAGetLastError();
freeaddrinfo(addrResult);
return err;
}
if (connect(_connectedSocket, addrResult->ai_addr, (int)addrResult->ai_addrlen) != 0)
{
int err = WSAGetLastError();
closesocket(_connectedSocket);
_connectedSocket = INVALID_SOCKET;
return err;
}
return 0; //successful
}
问题是我想随时取消连接,在取消事件按钮中,我调用了 closesocket(_connectedSocket);
但它被 connect()
函数阻止了返回错误后这么久。
谁能告诉我如何立即中断 connect()
函数?
非常感谢,
大同
最佳答案
让另一个线程执行连接
。这将允许您使用任何方法等待另一个线程,无论等待多长时间,并使用您希望的任何中止机制。
您不需要中止 connect
本身。
关于c++ - 取消阻塞套接字的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23318956/