一直想单独写一个在win下的使用IOCP的网络层,鉴于整体的框架没有想好,首先把所用函数和自己的想法整理出来,以便将来使用
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort,
LPDWORD lpNumberOfBytes,
PULONG_PTR lpCompletionKey,
LPOVERLAPPED *lpOverlapped,
DWORD dwMilliseconds);
CompletionPort:指定的IOCP,该值由CreateIoCompletionPort函数创建 (即创建的iocp句柄)
lpnumberofbytes:一次完成后的I/O操作所传送数据的字节数。 (传递的是整形引用)
lpcompletionkey:当文件I/O操作完成后,用于存放与之关联(一般情况下,我在这里投递一个存放内存的结构体,并标示io操作)
lpoverlapped:为调用IOCP机制所引用的OVERLAPPED结构(这个结构体可在普通结构提的基础上扩展,实现伸缩性,我认为这个结构体存放的即为上下文)
dwmilliseconds:用于指定调用者等待的时间。(一般都不希望等待,所以通常为0)
BOOL PostQueuedCompletionStatus(
HANDLE CompletlonPort,
DW0RD dwNumberOfBytesTrlansferred,
DWORD dwCompletlonKey,
LPOVERLAPPED lpoverlapped,
);
向消息队列传递的信息,可以根据信息的不同设置协议,比如传递PostQueuedCompletionStatus(hCompletionPort, 0, 0, NULL)一般用作关闭套接字
HANDLE CreateIoCompletionPort(
HANDLE FileHandle,
HANDLE ExistingCompletionPort,
ULONG_PTR CompletionKey,
DWORD NumberOfConcurrentThreads
);
在使用时需要注意的只有最后一个参数,他表示需要创建几个工作者线程。
未完待续