c++ - 取消阻塞套接字的连接?

标签 c++ sockets winsock2

我正在为客户端套接字使用以下代码

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/

相关文章:

c++ - 在 C/C++ 窗口中终止进程

c++ - 禁用 "Processing/ORDER options..."的 MSBuild 输出

c# - C++ 套接字读取端读取所有连接的消息

c++ - 收听 UDP 广播

c++ - 谁定义了新的运算符?

c++ - 如何使用 winHttp 为用户名设置原始 header ?

c++ - node.js 网络服务器和 C++ 游戏服务器

Android 套接字和异步任务

c - TCP/IP Echo 客户端挂起

c++ - 套接字接收调用卡住线程大约。 5秒