Rem*_*eau 14
注意此函数是Windows套接字规范的Microsoft特定扩展
SIO_GET_EXTENSION_FUNCTION_POINTER(操作码设置:O,I,T == 1)
检索指向相关服务提供者支持的指定扩展函数的指针.输入缓冲区包含全局唯一标识符(GUID),其值标识所讨论的扩展函数.指向所需函数的指针在输出缓冲区中返回.扩展功能标识符由服务提供商供应商建立,应包含在描述扩展功能和语义的供应商文档中.
在大多数系统上,Microsoft的提供商是唯一安装的提供商.但是,第三方提供商确实存在(自定义TCP堆栈等),也可以安装.根据以下
WSADATA
文档WSAStartup()
:
Windows套接字的体系结构在版本2中更改为支持多个提供程序,WSADATA不再适用于单个供应商的堆栈.
哪个进一步支持:
使用时创建套接字时socket()
,您无法控制使用哪个提供程序.使用WSASocket()
替代方法创建套接字时,可以选择通过lpProtocolInfo
参数指定特定的提供程序.
WSARecvMsg()
仅在Microsoft的提供程序中可用,因此您必须将其传递给与SOCKET
同一提供程序关联的服务器. WSAIoctrl()
可用于向命令SOCKET
所属的提供程序发送命令.因此,通过使用SIO_GET_EXTENSION_FUNCTION_POINTER
,您可以确保WSARecvMsg()
指定的提供程序支持(或任何其他特定于供应商的功能)SOCKET
,从而与之兼容SOCKET
.
Microsoft提供商通过WSAIoctrl()
1提供的其他Microsoft特定功能包括:
AcceptEx()
ConnectEx()
DisconnectEx()
GetAcceptExSockAddrs()
TransmitFile()
TransmitPackets()
WSASendMsg()
一旦检索指向一个特定供应商的功能,你可以重复使用指针,就像你的供应商保持在内存中加载(第一次调用之间要长WSAStartup()
,并在最后一次通话WSACleanup()
),并会传递给它SOCKET
的是属于该提供者.
1:每个特定于提供商的扩展机制
在Windows Vista及更高版本中,新的Winsock系统扩展直接从Winsock DLL导出,因此不需要WSAIoctl函数来加载这些扩展.在Windows Vista和更高版本中提供的新的扩展功能,包括
WSAPoll
和WSASendMsg
那都从ws2_32.dll导出的函数.
归档时间: |
|
查看次数: |
502 次 |
最近记录: |