未获取函数指针就调用函数(如直接连接mswsock.lib并直接调用AcceptEx)的消耗是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的。每次应用程序常试在服务提供层上(mswsock之上)调用AcceptEx时,都要先通过WSAIoctl获取该函数指针。如果要避免这个很影响性能的操作,应用程序最好是直接从服务提供层通过WSAIoctl先获取这些APIs的指针。
通过WSAIoctl获取AcceptEx函数指针时,只需要传递给WSAIoctl一个有效的SOCKET即可,该Socket的类型不会影响获取的AcceptEx函数指针,同理,其他的各种以EX后缀的扩展函数都可以这样使用了。
 
 我先声明了:
   LPFN_ACCEPTEX       lpAcceptEx;其他需要的参数我就略过去了
 然后
 DWORD nRet = WSAIoctl(                //此函数主要是用在 '改变套接字的模式' 上
m_listen_socket,
SIO_GET_EXTENSION_FUNCTION_POINTER,    //第二个参数决定了WSAIoctl的不同用途
&g_GUIDAcceptEx,
sizeof(g_GUIDAcceptEx),
&lpAcceptEx,       //作为输出缓冲区,以后就可以作为调用AcceptEx的指针
sizeof(lpAcceptEx),
&dwRet,NULL,NULL);
 nRet!=0.那么获取顺利,下一步,
 int bRet = lpAcceptEx(            //调用指针已可以使用
m_listen_socket,
lp_io->socket,           //单IO数据结构
            lp_io->buf,
0,                     //该参数为0,函数接到连接后立即返回,不会接收数据
sizeof(SOCKADDR_IN) + 16,
sizeof(SOCKADDR_IN) + 16,
&dwBytes,&lp_io->ol);
就是这样。

使用WSAIoctl获取socket扩展函数(如AcceptEx)的指针相关推荐

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

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

  2. 获取socket对应的接收缓冲区中的可读数据量

    获取socket对应的接收缓冲区中的可读数据量 本文介绍如何获取当前socket对应的接收缓冲区的可读数据量 在Linux上可以使用ioctl函数 #include <sys/ioctl.h&g ...

  3. 使用ACE_SOCK_SEQPACK_Association获取socket连接的本地及远程IP端口信息

    int connect(const std::string& ip, int port) {     ACE_INET_Addr portAddr(port, ip.c_str());     ...

  4. socket 获取回传信息_Luat系列官方教程5:Socket代码详解

    文章篇幅较长,代码部分建议横屏查看,或在PC端打开本文链接.文末依然为爱学习的你准备了专属福利~ TCP和UDP除了在Lua代码声明时有一些不同,其他地方完全一样,所以下面的代码将以TCP长连接的数据 ...

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

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

  6. IOCP使用acceptEX进行异步接收

    示例代码为什么要调用WSAIoctl ()函数 #include <winsock2.h> #include <windows.h> #include <string&g ...

  7. AcceptEx函数的示例代码

    2. 关于AcceptEx 使用此函数时,要包含头文:Mswsock.h,同时要链接:Mswsock.lib.可在源程序中加入下面的语句,这样在编译时,将自动链接Mswsock.lib. #pragm ...

  8. WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法

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

  9. c语言 accept,AcceptEx浅析(转)

    AcceptEx函数的定义如下: BOOL AcceptEx ( SOCKET sListenSocket, SOCKET sAcceptSocket, PVOID lpOutputBuffer, D ...

最新文章

  1. IIS设定 CORS 跨域请求(跨域)
  2. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)
  3. Python | threading04 - 使用信号量,实现线程间同步
  4. 在界面中显示文本内容
  5. 设计模式 - 单例模式(Singleton Pattern)
  6. 【英语学习】【WOTD】cacophony 释义/词源/示例
  7. Flex与.NET互操作系列文章索引
  8. 【原】lua的table深拷贝
  9. 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word
  10. ECS之System系统
  11. HTTPS详解SSL/TLS
  12. 企业级监控软件使用zabbix key监控nginx status各种状态
  13. 拜托,别再让我优化大事务了,我的头都要裂开了
  14. 2020第十二届全国大学生数学竞赛初赛试题及答案(江苏非数)
  15. CS模式(客户端到服务器端)
  16. 5款App帮你轻松搞定自定义锁屏
  17. 360 一个让人又爱又恨的公司
  18. C++加载PNG图片
  19. 如何破解类似于简书登录的滑动式验证码
  20. python和vb的区别 程序语句_python与VB的区别?

热门文章

  1. 仿八大行星绕太阳3D旋转效果
  2. rowid与rownum的含义是什么?
  3. 国内的人工智能神经网络研究院有哪些
  4. java——OOA,OOD,OOP
  5. ui设计概念是什么?ui设计包括哪些设计?
  6. android数据写入文件格式,Android 本地文件保存数据(2020-08-07)
  7. slab为什么要进行染色处理
  8. Flashback Query, Flashback Version Query
  9. python晋江爬虫_python爬虫之小说爬取
  10. 7、统计字母、空格、数字 与 其它字符的个数