完成端口API整理
1.
BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOfBytesTransferred, PULONG_PTR lpCompletionKey, LPOVERLAPPED *lpOverlapped, DWORD dwMilliseconds );
-
CompletionPort: 完成端口的句柄,用于与 I/O 操作相关联。 -
lpNumberOfBytesTransferred: 一个指向DWORD的指针,用于接收已完成的I/O操作的字节数。 -
lpCompletionKey: 一个指向ULONG_PTR的指针,用于接收与已完成I/O操作关联的完成键。 -
lpOverlapped: 一个指向OVERLAPPED结构的指针,用于接收已完成的I/O操作的信息。 -
dwMilliseconds: 超时时间,以毫秒为单位。如果设置为INFINITE,则函数将一直等待,直到有I/O操作完成。
2.
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );
-
hHandle: 要等待的内核对象的句柄。这可以是诸如线程句柄、进程句柄、事件句柄等的内核对象。 -
dwMilliseconds: 最大等待时间,以毫秒为单位。如果设置为INFINITE,则函数将一直等待,直到内核对象的状态变为 signaled。
函数返回值是等待对象的状态:
-
WAIT_OBJECT_0: 内核对象处于 signaled 状态,等待成功。 -
WAIT_TIMEOUT: 等待时间已过,但内核对象仍处于 nonsignaled 状态。 -
WAIT_ABANDONED: 等待成功,且内核对象是一个互斥对象,之前拥有该对象的线程已经终止。 -
WAIT_FAILED: 函数调用失败,可以通过调用GetLastError获取错误代码。
3.
int WSASend( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );
s: 指定一个已连接的、正在监听的或正在接受连接的套接字。lpBuffers: 指定一个WSABUF结构数组,每个结构指定一个缓冲区及其大小。dwBufferCount: 指定lpBuffers数组中的元素个数。lpNumberOfBytesSent: 发送函数返回时,指向已发送的字节数。dwFlags: 提供附加的发送选项。lpOverlapped: 如果是异步操作,指向一个WSAOVERLAPPED结构。lpCompletionRoutine: 如果是异步操作,指向完成例程。
4.
int WSARecv( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );
s: 指定一个已连接的、正在监听的或正在接受连接的套接字。lpBuffers: 指定一个WSABUF结构数组,每个结构指定一个缓冲区及其大小。dwBufferCount: 指定lpBuffers数组中的元素个数。lpNumberOfBytesRecvd: 接收函数返回时,指向接收到的字节数。lpFlags: 提供附加的接收选项。lpOverlapped: 如果是异步操作,指向一个WSAOVERLAPPED结构。lpCompletionRoutine: 如果是异步操作,指向完成例程。
浙公网安备 33010602011771号