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用法相关推荐

  1. 充分利用 cpu_如何充分利用云

    充分利用 cpu Over the years, building and testing software that runs on physical servers has become the ...

  2. IOCP扩展方法AcceptEx, DisconnectEx, GetAcceptExSockaddr用法示例

    这篇文章记录了我刚接触IOCP模型时的理解,对于初学者,应该算不错的调试程序,仅有一个400多行代码的dpr文件,可以直接用WriteLn输出信息,前提是会用delphi建立Console Appli ...

  3. 使用WSAIoctl获取AcceptEx函数指针

    Winsock2的其他供应商不一定会实现AcceptEx函数.同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Micro ...

  4. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

    这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...

  5. 完成端口(Completion Port)详解----- By PiggyXP(小猪)

    本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中--酝酿了两年之后,终于决定开始动笔了,但愿还不算晚-.. 这篇文档我非常详细并且图文并 ...

  6. 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 1-转

    完成端口(Completion Port)详解 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中--酝酿了两年之后,终于决定开始动笔了, ...

  7. 手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解

    2019独角兽企业重金招聘Python工程师标准>>> 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中--酝 ...

  8. 完成端口(Completion Port)学习

    文章转载自完成端口(Completion Port)详解 看了文章中的解说,大体看得明白. 但是当时有个不解之处:就是投递WSARecv请求的时候,没有明显传入该操作对应的自己定义的操作类型(就是Ge ...

  9. windows 下 IOCP模型(完成端口)

    IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型.它是应用程序使用线程池处理异步I/O请求的一种机制.在处理多个并发的异步I/O请求时,以往的模型都是在接收 ...

最新文章

  1. ChipScope Pro核生成器
  2. python流程控制语句-Python流程控制语句详解
  3. 基于区块链的健康链系统设计与实现(1)引言
  4. 【图解Java】这下可以真的弄懂Java IO了~
  5. 如何使用Python创建自己的加密货币
  6. 数据可视化|实验五 分析1996-2015年人口数据各个特征的分布与分散状况
  7. JS计算本周一和本周五的日期
  8. 名副其实!华为天才少年身份曝光!
  9. 设计方案--如何设计移动端高清方案
  10. Lua-pb 升级到Lua5.3
  11. 认识虚拟化(virtualization)
  12. 嵌入式linux驱动开发答辩问题,嵌入式Linux驱动工程师/BSP开发工程师面试笔试题集锦...
  13. jmeter html插件,Jmeter最常见的几个插件(一)
  14. C++入门教程(一)
  15. 英语单词词性顺口溜_英语单词词性顺口溜
  16. C语言——函数定义及用法【内部函数外部函数内联函数】
  17. sis最新地址获取方法_微信表情悄悄更新,获取最新表情方法!
  18. client wants service A, but it has B. Dropping connection.
  19. 根据Box-Muller变换原理利用均匀分布的随机变量生成二维柯西分布
  20. 数据结构 基本概念(数据项--数据元素--数据对象-数据类型-抽象数据类型)

热门文章

  1. Java基础笔记(4w字长文警告)
  2. 写给宝贝百天的一份信
  3. 【软考】系统集成项目管理工程师(三)系统集成专业技术知识
  4. Ansible 实现批量建立互信
  5. [伊利丹·怒风] Unity3D 绘制矩形(DrawRect)及可视化调试
  6. 多屏互动的前景探索-互动通-袁珏明
  7. i 技术会笔记 | Druid在爱奇艺的实践和技术演进
  8. 公司出路:与速达ERP合作设想
  9. mysql polygon_查找POINT是否在MySQL 5.7中的POLYGON中
  10. .bat文件打开方式