数名

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_PENDINGI/O被延迟。

 

其他错误参考windows

 

说明

当没有关联IOCP,lpOverlapped->hEvent有效,则lpCompletionRoutine可以为NULL

当没有关联IOCP,lpCompletionRoutine = NULL,则lpOverlapped->hEvent必须有效。

当关联了IOCP时,lpOverlapped必须有效,而lpOverlapped->hEventlpCompletionRoutine被忽略。

 

参考

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;