iocp基础

在看boost.asio源码时,看针对window平台的win_iocp_io_service中使用到iocp

接口

HANDLE WINAPI CreateIoCompletionPort(
  _In_     HANDLE    FileHandle,
  _In_opt_ HANDLE    ExistingCompletionPort,
  _In_     ULONG_PTR CompletionKey,
  _In_     DWORD     NumberOfConcurrentThreads
);

CreateIoCompletionPort创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联,或创建尚未与文件句柄关联的 I/O 完成端口,以便稍后关联
FileHandle:打开的文件句柄或 INVALID_HANDLE_VALUE,INVALID_HANDLE_VALUE表示该函数将创建 I/O 完成端口
ExistingCompletionPort :现有 I/O 完成端口或 NULL 的句柄,如果此参数指定现有的 I/O 完成端口,则函数将其与 FileHandle 参数指定的句柄相关联,如果此参数为 NULL,则该函数将创建新的 I/O 完成端口
CompletionKey:指定文件句柄的每个 I/O 完成数据包中包含的每句柄用户定义完成密钥,用来来帮助应用程序跟踪已完成的 I/O 操作
NumberOfConcurrentThreads:操作系统允许并发处理 I/O 完成端口的 I/O 完成数据包的最大线程数

BOOL WINAPI PostQueuedCompletionStatus(
  _In_     HANDLE       CompletionPort,
  _In_     DWORD        dwNumberOfBytesTransferred,
  _In_     ULONG_PTR    dwCompletionKey,
  _In_opt_ LPOVERLAPPED lpOverlapped
);

CompletionPort :I/O 完成数据包要发布到的 I/O 完成端口的句柄
dwNumberOfBytesTransferred:要通过 GetQueuedCompletionStatus 函数的 lpNumberOfBytesTransferred 参数返回的值
dwCompletionKey:要通过 GetQueuedCompletionStatus 函数的 lpCompletionKey 参数返回的值
lpOverlapped:要通过 GetQueuedCompletionStatus 函数的 lpOverlapped 参数返回的值

BOOL GetQueuedCompletionStatus(
  [in]  HANDLE       CompletionPort,
        LPDWORD      lpNumberOfBytesTransferred,
  [out] PULONG_PTR   lpCompletionKey,
  [out] LPOVERLAPPED *lpOverlapped,
  [in]  DWORD        dwMilliseconds
);

尝试从指定的 I/O 完成端口取消对 I/O 完成数据包的排队。 如果没有完成数据包排队,函数将等待与完成端口关联的挂起 I/O 操作完成
CompletionPort:完成端口的句柄
lpNumberOfBytesTransferred:指向变量的指针,该变量接收在完成的 I/O 操作中传输的字节数
lpCompletionKey:指向变量的指针,该变量接收与 I/O 操作已完成的文件句柄关联的完成键值。 完成键是在对 CreateIoCompletionPort 的调用中指定的每个文件密钥
lpOverlapped:指向变量的指针,该变量接收在启动完成 I/O 操作时指定的 OVERLAPPED 结构的地址
dwMilliseconds:调用方愿意等待完成数据包出现在完成端口上的毫秒数。 如果完成数据包未在指定时间内显示,则该函数超时,返回 FALSE,并将 *lpOverlapped 设置为 NULL

你可能感兴趣的:(boost,服务器,linux,网络)