例如,我在线程A中调用recv一个socket,由于没有数据到达而阻塞在那里,在另外一个线程B中想使A线程中的recv操作立即返回,有没有什么办法可以实现?(不关闭这个socket)

解决方案 »

  1.   

    recv很难解决这个问题还是用WSARecv吧OVERLAPPED ov;
    memset (&ov, 0, sizeof (ov));
    ov.hEvent = CreateEvent (....);WSABUF wsa = { buflen, buf };
    WSARecv (s, &wsa, 1, &recv_bytes, &flags, &ov, NULL);
    HANDLE evts [2];
    evts [0] = ov.hEvent;
    evts [1] = global_evt_for_socket_s;
    DWORD ret = WaitForMultipleObjects (2, evt, FALSE, INFINITE);if (ret == WAIT_OBJECT_0)
    {
       // recv 到数据了
    }
    else if (ret == WAIT_OBJECT_0 + 1)
    {
      // 某个线程请求...
    };然后另外一个线程中
    可以SetEvent (global_evt_for_socket_s);
    这样就可以让WaitForMultipleObjects不在等待了如果想知道更多的信息,请在msdn中查WSARecv