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