WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
来源:互联网 发布:苹果手机解压软件 编辑:程序博客网 时间:2024/05/20 01:34
Winsock2的其他供应商不一定会实现AcceptEx函数。同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Microsoft将在以后版本的windows里。在运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通过WSAioctl的SIO_GET_EXTENSION_FUNCTION_POINTER操作动态调用这些扩展APIs.
未获取函数指针就调用函数(如直接连接mswsock.lib并直接调用AcceptEx)的消耗是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的。每次应用程序常试在服务提供层上(mswsock之上)调用AcceptEx时,都要先通过WSAIoctl获取该函数指针。如果要避免这个很影响性能的操作,应用程序最好是直接从服务提供层通过WSAIoctl先获取这些APIs的指针。
需要注意的是,通过WSAIoctl获取AcceptEx函数指针时,只需要传递给WSAIoctl一个有效的SOCKET即可,该Socket的类型不会影响获取的AcceptEx函数指针。
同理可以获取GetAcceptExSockaddrs函数指针
具体调用方式参看如下代码(详细参看《windows 网络编程第二版》源码第五章):
GUID guidAcceptEx = WSAID_ACCEPTEX,guidGetAcceptExSockaddrs = WSAID_GETACCEPTEXSOCKADDRS;
LPFN_ACCEPTEX lpfnAcceptEx;
LPFN_GETACCEPTEXSOCKADDRS lpfnGetAcceptExSockaddrs;
DWORD bytes;
//加载AccpetEx函数指针
rc = WSAIoctl(
sockobj->s,
SIO_GET_EXTENSION_FUNCTION_POINTER,
&guidAcceptEx,
sizeof(guidAcceptEx),
&lpfnAcceptEx,
sizeof(lpfnAcceptEx),
&bytes,
NULL,
NULL
);
//加载GetAcceptExSockaddrs函数指针
rc = WSAIoctl(
sockobj->s,
SIO_GET_EXTENSION_FUNCTION_POINTER,
&guidGetAcceptExSockaddrs,
sizeof(guidGetAcceptExSockaddrs),
&lpfnGetAcceptExSockaddrs,
sizeof(lpfnGetAcceptExSockaddrs),
&bytes,
NULL,
NULL
);
- WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
- WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
- WSAIoctl函数SIO_GET_EXTENSION_FUNCTION_POINTER参数的意义
- WSAIoctl
- WSAIoctl()
- WSAIoctl
- 使用WSAIoctl获取socket扩展函数(如AcceptEx)的指针
- WSAIoctl Function
- WSAIoctl Function
- (转)WSAIoctl Function
- (转)WSAIoctl Function
- (转)WSAIoctl Function
- WSAIoctl返回10045错误
- WSAIoctl 函数详解
- [ILINK32 Error] Error: Unresolved external 'WSAIoctl'
- 使用WSAIoctl和SIO_ADDRESS_LIST_QUERY去查询本机ip
- IOCP中为什么使用WSAIoctl获取AcceptEx函数指针
- IOCP中为什么使用WSAIoctl获取AcceptEx函数指针
- Android屏幕适配全攻略(最权威的官方适配指导)
- Most Advanced Robotics Simulation Software Overview
- iOS详细解析视图控制器的正向和逆向传值
- 用下标法和指针法分别输出数组中的全部元素
- Java多线程基础总结
- WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
- 端口状态说明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT
- 栈的应用之进制转换
- HUD-5399 Too Simple(数学)
- bootstrap,select
- 身份证号码的合法性校验
- boost处理string
- 数据结构实验之二叉树的建立与遍历
- AfxInitExtensionModule和AfxTermExtensionModule