WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
来源:互联网 发布:杰普软件科技有限公司 编辑:程序博客网 时间:2024/05/21 11:22
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函数指针
- 《C#核心开发技术从入门到精通》读书笔记
- 安装12306的网页证书,出现不响应的解决办法之一
- centos6 下使用elcipse 技巧
- The Adventures of Huckleberry Finn——5、The plan to free Jim
- 心灵电台iHeartRadio:找适合你心情的音乐
- WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
- 单纯的看书成不了专家
- SkipList 跳表
- Leetcode: Merge Sorted Arrays
- SQLSERVER存储过程基本语法
- 那些有着哲学意味令人深思的
- 二进制与三进制的故事
- ubuntu上安装nasm以及nasm在ubuntu上的简单使用
- 简单的输入框value隐藏