当前位置: 首页 > news >正文

使用WSAIoctl获取AcceptEx函数指针 [转]

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

http://www.cnblogs.com/huangyong9527/archive/2012/05/29/2523537.html

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
                    );

转载于:https://my.oschina.net/zengjs275/blog/737874

相关文章:

  • esxi报错There is no more space for virtual disk--逻辑卷缩减!
  • Delphi 7使用自定义图标关联文件类型
  • NServiceBus---最流行的开源企业服务总线 for .Net
  • Struts2 - 常用的constant总结
  • EF-CodeFirst 继承关系TPH、TPT、TPC
  • 洛谷 P1313 计算系数 Label:杨辉三角形 多项式计算
  • Oracle存储过程基本语法介绍
  • Centos 配置 puppet 服务
  • bash中获取其他时间的日期
  • 【MySQL】5.7新特性之六
  • 基于jQuery免费开源图片裁切插件 - Croppic
  • 自定义编译安装python简单笔记。
  • 云支付整合Tp3.2.3代码整理
  • mysql select 结果集循环
  • EF实体框架之CodeFirst八
  • 03Go 类型总结
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 基础知识 - 入门篇(一)
  • mysql innodb 索引使用指南
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 后端_MYSQL
  • 检测对象或数组
  • 前端知识点整理(待续)
  • 异常机制详解
  • Prometheus VS InfluxDB
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​Linux·i2c驱动架构​
  • (09)Hive——CTE 公共表达式
  • (3)(3.5) 遥测无线电区域条例
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转) Android中ViewStub组件使用
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ***原理与防范
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .apk文件,IIS不支持下载解决
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net实现客户区延伸至至非客户区
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /etc/fstab 只读无法修改的解决办法
  • @Documented注解的作用
  • @Resource和@Autowired的区别
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [100天算法】-目标和(day 79)
  • [Android学习笔记]ScrollView的使用
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [hdu1561] The more, The Better 【树形DP】