16.2.3 Windows扩展函数
Windows Socket规范提供了一组基于Berkeley套接字函数的扩展函数。这些扩展函数在实现Socket功能的基础上,还允许基于消息或函数进行处理,处理异步网络事件,开启重叠I/O功能。除了WSAStartup()函数和WSACleanup()函数外,编写Socket程序可以不使用这些扩展API函数,但是建议使用这些扩展函数以保持与Windows编程(www.cppentry.com)模式一致。表16-3中列出了有关Socket的Windows扩展函数。
表16-3 有关Socket的Windows扩展函数
|
Windows扩展函数< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
功 能 |
|
WSAAccept() |
accept()函数的扩展版本,
允许条件接收和Socket分组 |
|
WSAAsyncGetHostByAddr() |
根据地址异步获取主机,基于消息实现 |
|
WSAAsyncGetHostByName() |
根据名称异步获取主机,基于消息实现 |
|
WSAAsyncGetProtoByName() |
根据名称异步获取协议信息,基于消息实现 |
|
WSAAsyncGetProtoByNumber() |
根据协议号异步获取协议信息,基于消息实现 |
|
WSAAsyncGetServByName() |
根据服务器名称和端口号,异步
获取服务器信息,其是基于消息实现的 |
|
WSAAsyncGetServByPort() |
根据端口号和协议,异步获取服
务器信息,其是基于消息实现的 |
|
WSAAsyncSelect() |
实现异步版本的select()函数 |
|
WSACancelAsyncRequest() |
取消异步获取系列的函数,即取消
WSAAsyncGetXByY()函数 |
|
WSACleanup() |
退出底层的Windows Socket DLL的引用 |
|
WSACloseEvent() |
销毁事件对象 |
|
WSAConnect() |
Connect()函数的扩展版本,允许交换
连接数据和QOS标准 |
|
WSACreateEvent() |
创建事件对象 |
|
WSADuplicateSocket() |
复制Socket |
|
WSAEnumNetworkEvents() |
枚举网络事件 |
|
WSAEnumProtocols() |
枚举当前系统中每个有效的协议信息 |
|
WSAEventSelect() |
连接网络事件和事件对象 |
|
WSAGetLastError() |
获取最近的Windows Socket错误信息 |
|
WSAGetOverlappedResult() |
返回重叠操作的完成状态 |
|
WSAGetQOSByName() |
根据服务名获取QOS参数 |
|
WSAHtonl() |
Htonl()函数的扩展版本,将32位整
数从主机字节顺序转换成网络字节顺序 |
|
WSAHtons() |
Htons()函数的扩展版本,将16位整数
从主机字节顺序转换成网络字节顺序 |
|
WSAIoctl() |
ioctl 函数的重叠执行版本 |
|
WSAJoinLeaf() |
增加一个结点到会话中 |
|
WSANtohl() |
ntohl()函数的扩展版本,将32位整数从
网络字节顺序转换成主机字节顺序 |
|
WSANtohs() |
ntohs()函数的扩展版本,将16位整数
从网络字节顺序转换成主机字节顺序 |
|
WSAProviderConfigChange() |
接收安装服务或卸载服务的通知消息 |
|
WSARecv() |
Recv()函数的扩展版本 |
|
WSARecvFrom() |
recvfrom()函数的扩展版本 |
续表
|
Windows扩展函数 |
功 能 |
|
WSAResetEvent() |
重置事件对象 |
|
WSASend() |
send()函数的扩展版本 |
|
WSASendTo() |
sendto()函数的扩展版本 |
|
WSASetEvent() |
设置事件对象 |
|
WSASetLastError() |
设置最近的错误信息 |
|
WSASocket() |
socket()函数的扩展版本。使用
WSAPROTOCOL_INFO结构作
为输入参数,并创建重叠socket |
|
WSAStartup() |
初始化Windows Sockets DLL |
|
WSAWaitForMultipleEvents() |
在多个事件对象上阻塞 |
上面这些扩展函数是对Windows Socket规范提供的Socket函数的封装,支持消息和函数处理。如在WSAAsyncGetServByName()函数中,可以指定接收消息的对话框句柄和消息,当异步函数执行完毕后,会发送消息给对话框,用户可以在对话框中捕获相应的消息进行处理。这与Windows的消息编程(www.cppentry.com)模式是一致的。因此,Windows Socket扩展函数的封装方便了Socket程序的开发。用户可以尽量使用扩展函数开发Socket程序。