WSAIoctl函数SIO_GET_EXTENSION_FUNCTION_POINTER参数的意义
来源:互联网 发布:java redis list 操作 编辑:程序博客网 时间:2024/05/22 14:57
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用法
- main()函数参数的意义
- 函数名作参数的意义
- 函数指针做函数参数的意义
- WSAIoctl 函数详解
- 使用WSAIoctl获取socket扩展函数(如AcceptEx)的指针
- listen函数中backlog参数的意义
- int APIENTRY WinMain( )函数的参数意义
- 双重指针做函数参数的意义
- main函数参数意义
- WSAIoctl
- WSAIoctl()
- WSAIoctl
- 关于smarty模板display函数的$compile_id 参数的意义
- 创建socket函数的第三个参数的意义
- mmap的详细使用及函数参数意义
- [zt]Apache httpd.conf中文说明
- Ext grid中得到选择行的方法总结.
- javascript 获取页面、屏幕大小
- 单元测试工具Numega
- ASP读取远程页面生成静态页
- WSAIoctl函数SIO_GET_EXTENSION_FUNCTION_POINTER参数的意义
- 单片机的经验之谈
- 数据库系统概念_回顾
- 如何使用Java中的Date和Calendar类
- 关于unix和linux下的系统监控
- 编写TESTBENCH---测试--VHDL
- 个人博客声明
- 新的开始
- 做人