完成端口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
: 如果是异步操作,指向完成例程。