zoukankan      html  css  js  c++  java
  • 使用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
                        );

  • 相关阅读:
    【6.24校内test】T1 江城唱晚
    【6.20校内test】
    【洛谷p1983】车站分级
    【洛谷p2239】螺旋矩阵
    【6.18校内test】T2分数线划定
    【6.18校内test】T1多项式输出
    【洛谷p1981】表达式求值
    【洛谷p1077】摆花
    【洛谷p1158】导弹拦截
    博客园 api
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/4096018.html
Copyright © 2011-2022 走看看