数名
vtcp_sendex
声明
int WINAPI vtcp_sendex(VTCP_SOCKET socket,PCHAR buf,int len,int flag,int* lpcb,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
描述
发送数据流。
输入
VTCP_SOCKET socket: VTCP句柄,由vtcp_socket函数创建。
PCHAR buf:发送数据缓冲区。
int len:数据缓冲区大小。
int flag: 发送标志,未用应该填为0。
int* lpcb: 实际发送字节数地址。
LPWSAOVERLAPPED lpOverlapped: 重叠I/O结构。
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine: 完成例程。
输出
int* lpcb: 如果无错误就是实际发送字节数,一般异步都会返回WSA_IO_PENDING,所以这里的值无意义。
返回值(错误码=0 成功)
ERROR_INVALID_HANDLE: VTCP句柄不正确。
ERROR_INVALID_STATE:
VTCP句柄状态不正确。
ERROR_INVALID_PARAMETER: 参数不正确。
ERROR_NOT_ENOUGH_QUOTA: 配额不足,未决异步数量过多。
ERROR_IO_PENDING:I/O被延迟。
其他错误参考windows
说明
当没有关联IOCP时,lpOverlapped->hEvent有效,则lpCompletionRoutine可以为NULL。
当没有关联IOCP时,lpCompletionRoutine = NULL,则lpOverlapped->hEvent必须有效。
当关联了IOCP时,lpOverlapped必须有效,而lpOverlapped->hEvent与lpCompletionRoutine被忽略。
参考
Windows完成端口编程模型(IOCP)。
WSASend
vtcp_iocp
typedef
void
(CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
IN
DWORD dwError,
IN
DWORD cbTransferred,
IN
LPWSAOVERLAPPED lpOverlapped,
IN
DWORD dwFlags
);
#define WSAOVERLAPPED
OVERLAPPED
typedef struct _OVERLAPPED * LPWSAOVERLAPPED;
typedef struct _OVERLAPPED {
ULONG_PTR
Internal;
ULONG_PTR
InternalHigh;
union
{
struct {
DWORD Offset;
DWORD OffsetHigh;
} DUMMYSTRUCTNAME;
PVOID Pointer;
}
DUMMYUNIONNAME;
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;