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函数指针

具体调用方式参看如下代码:

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获取AcceptEx函数指针相关推荐

  1. 使用GetProcAddress获取ZwUnmapViewOfSection函数指针

    要想使用ZwUnmapViewOfSection函数,又没有安装驱动开发的工具包,可以从ntdll.dll里获取ZwUnmapViewOfSection的函数指针,代码如下: #include < ...

  2. c++ 如何不用decltype获取一个函数指针的类型名

    举例,假设函数是  bool compareIsbn(const string &s1,const string &s2); 那么如何获取指向这个函数指针的类型?我们在map中要用到这 ...

  3. 使用WSAIoctl获取socket扩展函数(如AcceptEx)的指针

    未获取函数指针就调用函数(如直接连接mswsock.lib并直接调用AcceptEx)的消耗是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的.每次应用程序常试在服务提供层上 ...

  4. AcceptEx函数的示例代码

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

  5. AcceptEx函数与完成端口的结合使用例子

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是在学 ...

  6. linux函数地址获取函数名,函数名/函数地址/函数指针

    函数指针:1.指针变量 2.指针变量指向函数 这正如用指针变量可指向整型变量.字符型.数组一样. 在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址. 可利用该指针变量调用函数, ...

  7. C++使用switch动态获取函数(通过函数指针实现)

    C++使用switch动态获取函数(通过函数指针实现) 基本的就不再赘述了,以下使用三种方法完成根据不同情况动态获取函数的功能. 方法一:通过形参取地址获得函数指针 这种方式的好处是可以通过传入多个取 ...

  8. C++如何获取虚函数表(vtbl)的内容及虚成员函数指针存放原理

    一.前言 因为不同的运行环境的运行结果是不同的,特别是不同的编译器对c++类对象模型的实现是很可能存在差异,所以有时不同的编译平台的代码不能兼容也是部分原因于此.本文的运行环境是: ubuntu16. ...

  9. AcceptEx函数特点及需要提防的地方,看完了解更深入了,所以转过来

    接受连接请求 服务器要做的最普通的事情之一就是接受来自客户端的连接请求.在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数.有趣的是,通常的同步接受函数accept()的返回值是 ...

最新文章

  1. python基础学习[python编程从入门到实践读书笔记(连载六)]:数据可视化项目第17章
  2. latex设置脚注页码设置_毕设论文页眉页码设置
  3. 为什么谈及硬件,必言软件?软硬件协同让开源世界“阴阳调和”
  4. 如何合理地决定线程池大小?
  5. C++关闭同步流 ios::sync_with_stdio(false);
  6. Consul注册中心的启动方式及下载方法
  7. Ubuntu 安装fish
  8. VC编程助手_VC Assist(内附VC显示行号) VC插件
  9. 在Solaris下安装中文语言包
  10. FANUC主板图纸 电路图
  11. Caused by: No object in the CompoundRoot has a publicly accessible property named 'y' (no setter cou
  12. python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...
  13. 英语不好,可以进外企吗?
  14. Kafka Confluent 简介
  15. Anaconda3安装
  16. 鸿蒙塔罗占卜 你是他的备胎吗,鸿蒙塔罗占卜:为什么你每段感情都不长久?...
  17. 【luogu2026】【数学】求一次函数解析式
  18. QGC地面站二次开发(三)Qt 简洁地面站
  19. atom编辑器的常用插件
  20. Windows 10 打开 卓越模式

热门文章

  1. 用C++设计一个Bank类,实现银行某账户的资金往来账目管理。
  2. 2022最全最新前端面试题(附加解答)
  3. android+多处理器+ios,ios与安卓的区别 浅谈ios为什么比安卓流畅 (2)
  4. RMAN tablespace point-in-time recovery (TSPITR)
  5. ISO模型与tcpip模型
  6. B树与B+树的区别!!
  7. js时间戳转换为日期格式
  8. 实时时钟电路DS1302的原理及应用
  9. 北京理工大学计算机在线作业答案,北理工《操作系统》在线作业满分
  10. python文件复制重命名_python复制文件并重命名