我有一个线程在不断Accept客户端来的连接,
当Accept处于阻塞等待连接的时候,如何能退出该阻塞继续往下执行
要求:
1:不要说让我杀掉该线程,
2:不要说让我模拟客户端发送一个连接请求(因为我现在就是这么做的)

解决方案 »

  1.   

    俺刚找到一个方法:closesocket
    不知是否还有他法
      

  2.   

    用事件做成非阻塞啊!例如
    //
    // 接收TCP数据。
    //
    int CEmsSocket::Recv(LPWSABUF lpBuf, DWORD dwFlags /* = 0*/)
    {
    DWORD dwNumberOfBytesRecvd = 0; WSAEventSelect(m_pSock, m_hRecvEvent, FD_READ);
    // 等待接收事件
    if (WSAWaitForMultipleEvents(1, &m_hRecvEvent, FALSE, TIMEOUT_BASE, FALSE) == WSA_WAIT_EVENT_0
    && WSAResetEvent(m_hRecvEvent)
    && WSAEnumNetworkEvents(m_pSock, m_hRecvEvent, m_lpNetworkEvent) == 0
    && (m_lpNetworkEvent->lNetworkEvents & FD_READ)
    && m_lpNetworkEvent->iErrorCode[FD_READ_BIT] == 0)
    {
    // 接收数据
    if (WSARecv(m_pSock, lpBuf, 1, &dwNumberOfBytesRecvd, &dwFlags, NULL, NULL) != SOCKET_ERROR)
    {
    return dwNumberOfBytesRecvd;
    }
    } return SOCKET_ERROR;} // Recv
      

  3.   

    //设置为非组塞
    if(ioctlsocket(m_s,FIONBIO ,&ul))
    {
    throw "ioctlsocket";
    }
    break;
    使用前你先用这个设置一下,就不会组塞了。