重叠IO 通信模型,函数记录。

 

SOCKET WSASocket(
  int af,
  int type,
  int protocol,
  LPWSAPROTOCOL_INFO lpProtocolInfo,
  GROUP g,
  DWORD dwFlags
);
 
 
af
[in] 指明地址协议家族。一般都是使用IP协议。 一般的参数都是 AF_INET
type
[in] 指明该通信是什么样的数据格式。TCP 还是UDP 等。 (SOCK_STREAM 参数指 数据流格式 TCP格式,
SOCK_DGRAM 是UDP 数据包格式。)
protocol
[in]
使用的特定协议,如果调用者不愿指定协议则定为0。 一般指定为:IPPROTO_TCP 表示使用TCP协议。
lpProtocolInfo
[in] 指定下层服务的提供者。
g
[in] 保留字。
dwFlags
[in] 指定套接字的属性,如果使用重叠IO的话,必须指定WSA_FLAG_OVERLAPPED.

 


 

 
 

int WSASend(

SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );

 

s
[in]欲发送消息的套接字
lpBuffers
[in] 发送的缓冲区
dwBufferCount
[in] 发送的缓冲区的大小
lpNumberOfBytesSent
[out]返回发送成功的字节个数。
dwFlags
[in]标志
lpOverlapped
[in]与此IO操作关联的WSAOVERLAPPED结构。
lpCompletionRoutine
[in] 指定一个完成例程。

IO操作函数都接受一个WSAOVERLAPPED结构的参数,此IO函数会立即返回,它们依靠传递的WSAOVERLAPPED结构管理 IO的完成,IO完成之后,应用程序可以有两种方法可以接受到重叠IO完成的通知:

1、在与WSAOVERLAPPED结构关联的事件对象上等待,IO完成之后,此事件对象受信,这个是最常用的方法。
2、使用 lpCompletionRoutine 指向的完成例程。完成例程是一个自定义的函数,IO操作完成后,就去调用它。这种方法使用的很少,将 lpCompletionRoutine 设置为NULL即可。


 

typedef struct _WSAOVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
WSAEVENT hEvent; } WSAOVERLAPPED,
*LPWSAOVERLAPPED;
前四个参数,由系统内部调用,使用时不用操作这四个参数。	hEvent是一个事件对象的句柄,可以关联一个事件对象,当IO完成后,会通知该事件对象。

 


BOOL WSAGetOverlappedResult(
  SOCKET s,
  LPWSAOVERLAPPED lpOverlapped,
  LPDWORD lpcbTransfer,
  BOOL fWait,
  LPDWORD lpdwFlags

 

);

获取重叠操作的结果。

 

s
[in] 欲获取的IO操作相关的套接字
lpOverlapped
[in] 指定的WSAOVERLAPPED 结构
lpcbTransfer
[out] 获取实际传输的字节数。
fWait
[in] 标志是否等待还未完成的IO操作,如果是true的话,会等到IO操作完成之后,函数才返回。
lpdwFlags
[out]获取更详细的完成的状态


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值