如何区分IOCP处理线程中完成的操作?

时间:2013-06-14 01:44:20

标签: winapi winsock iocp

我的应用程序可以使用WSASend和WSARecv同时从客户端发送和接收数据。那么,如何区分哪个操作在IOCP处理线程中完成(发送或接收)?

BOOL bReturn = GetQueuedCompletionStatus(srv.m_hCompPort, &dwBytesTransfered, (LPDWORD)&lpContext, &pOverlapped, INFINITE);

我认为我可以为此目的使用OVERLAPED结构,但我不能。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案非常简单:

struct iOverlaped : public OVERLAPPED{
    enum Type {
        Send,
        Receive
    };
    iOverlaped(Type type_ ) {
        ZeroMemory(this, sizeof(iOverlaped));
        type = type_;
    }

    Type type;
};

对于每个连接,我们必须创建两个重叠的实例(每个操作类型一个)...