使用WSAIoctl获取AcceptEx函数指针 [转] - 冰花ぃ雪魄

zhaoxinshanwei 2021-08-29 原文


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


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

posted on
2014-11-13 22:07 
冰花ぃ雪魄 
阅读(431
评论(0
编辑 
收藏 
举报

 

版权声明:本文为zhaoxinshanwei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhaoxinshanwei/p/4096018.html

使用WSAIoctl获取AcceptEx函数指针 [转] - 冰花ぃ雪魄的更多相关文章

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

    Winsock2的其他供应商不一定会实现AcceptEx函数。同样情况也包括的其他Microsoft的特定AP […]...

随机推荐

  1. c++ switch和case的用法

    #include "pch.h" #include<iostream> using namespa […]...

  2. flink 自定义触发器 定时或达到数量触发

    flink 触发器 触发器确定窗口(由窗口分配程序形成)何时准备由窗口函数处理。每个WindowAssigne […]...

  3. Hadoop完全分布式安装配置完整过程

    一. 硬件、软件准备 1. 硬件设备 为了方便学习Hadoop,我采用了云服务器来配置Hadoop集群。集群使 […]...

  4. Python基础-文件读写

    读取文件 全部读取 新建一个a.txt文件,里面写入如下三行: aaabbbccc python自动导入了io […]...

  5. C语言中的 (void*)0 与 (void)0

      前几天看到一个宏, 它大概是这样的:    #define assert_param(expr) ((ex […]...

  6. 分布式事务的 6 种解决方案,写得非常好!

    作者:蘑菇先生 出处:www.cnblogs.com/mushroom/p/13788039.html 介绍 […]...

  7. 【美团点评】2020校招数据分析方向笔试题

    这几天做了下美团校招的一些套题。(只写了编程,这两天慢慢更新吧)   这套题还是蛮简单的。。我暴力了好几个都能 […]...

  8. matlab练习程序(最大均值滤波)

    clear;clc;width=3;xwidth=(width-1)/2;imgn=imread(\'1.bm […]...

展开目录

目录导航