其他分享
首页 > 其他分享> > Overlapped Model

Overlapped Model

作者:互联网

Overlapped Model

重叠I/O函数

创建套接字

SOCKET WSASocket(int af,int type,int protocol,//前三个函数与socket函数相同
LPWSAPROTOCOL_INFO lpProtocolInfo,//指定下层服务提供者,可以是NULL
GROUP g,//保留
DWORD dwFlags//指定套接字属性,要使用重叠I/O模型,必须指定WSA_FLAG_OVERLAPPED
)
int WSASend(
SOCKET s,//套接字句柄
LPWSABUP lpBuffers,//Wsabuf结构数据,包含一个缓冲区指针和对应缓冲区的长度
DWORD dwBufferCount,//上面WSABUF数据大小
LPDWORD lpNumberOfBytesSent,//如果I/O操作立即完成,此参数取得实际传输数据的字节数
DWORD dwFlags,//标志
LPWSAOVERLAPPED lpOverlapped,//与此I/O操作关联的WSAOVERLAPPED结构
LPWSAOVERLAPPED_COMPLETION_REUTINE lpCompletionRoutine//指定一个完成例程
)
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_REUTINE lpCompletionRoutine

接收连接

BOOL AcceptEx(
SOCKET sListenSocket,//监听套接字句柄
SOCKET sAcceptSocket,//指定一个未被使用的套接字,在这个套接字上接受新的连接
PVOID lpOutputBuffer,//指定一个缓冲区,用来取得在新连接接收到的第一块数据,服务器的本地地址和客户端地址
DWORD dwReceiveDataLength,//上面lpOutputBuffer所指缓冲区的大小
DWORD dwLocalAddressLength,//缓冲区中为本地地址留的长度,必须比最大地址长度多16
DWORD dwRemoteAddressLength,//缓冲区中为远程地址预留的长度,必须比最大地址长度多16
LPDWORD lpdwBytesReceived,//用来取得接收到数据的长度
LPOVERLAPPED lpOverlapped //指定用来处理请求的OVERLAPPED结构,不能为NULL
);//声明在Mswsock.h中,需要添加Mswsock.lib库的链接.
//加载扩展函数AccepEx
CUID GuidAcceptEx=WSAID_ACCEPTEX;
DWORD dwBytes;
WSAIoctl(pListen->s,
SIO_GET_EXTENSION_FUNCTION_POINTER,
&GuidAcceptEx,
sizeof(GuidAcceptEx),
&pListen->lpfnAcceptEx,
sizeof(pListen->lpfnAcceptEx),
&dwBytes,
NULL,
NULL
);

事件通知方式

typedef struct _WSAOVERLAPPED{
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
WSAEVENT hEvent;//再此为这个操作关联一个事件对象句柄
}WSAOVERLAPPED,*LPWSAOVERLAPPED;
BOOL WSAGetOverlappedResult(
SOCKET s,//套接字句柄
LPWSAOVERLAPPED lpOverlapped,//重叠操作启动时指定WSAOVERLAPPED结构
LPDWORD lpcbTransfer,//用来取得实际传输字节的数量
BOOL fWait,//指定是否要等待未决的重叠操作
LPDWORD lpdwFlags//用于取得完成状态
)

标签:Overlapped,重叠,AcceptEx,WSAOVERLAPPED,DWORD,接字,Model,函数
来源: https://www.cnblogs.com/binarysystemloophole/p/13496431.html