• Windows Sockets2 提供者专用扩展机制


    服务提供商可以对winsock进行扩展。WSAIoctl函数使得服务提供商可以提供自己专用的特性扩展。应用程序如果要使用一个扩展函数,必须得到该扩展函数的地址,即函数指针。通过调用WSAIoctl函数并指定SIO_GET_EXTENSION_FUNCTION_POINTER控制代码和一个标示该函数的GUID值(InBuffer参数),在OutBuffer参数中就返回了该函数的地址。

    扩展函数的函数原型、GUID值以及详细调用信息由服务提供商负责提供,调用者不需要知道其实现细节。这使得对与同一个功能函数可以由多个服务提供商提供。

    mswsock.h中包含了微软对Windows Sockets Api的专有扩展(微软也是一个服务提供商啊)。下面代码详细演示了如何使用微软提供的扩展函数LPFN_DISCONNECTEX


    代码
    //1、取得函数指针

    void * mDisconnectExFunc;

    int loadDisconnectEx( SOCKET fd )

    {

         LPFN_DISCONNECTEX fnDisConnectEx 
    = NULL;

         GUID guidDisConnectEx 
    = WSAID_DISCONNECTEX;

         DWORD dwByte;

         ::WSAIoctl( fd, SIO_GET_EXTENSION_FUNCTION_POINTER,

                  
    &guidDisConnectEx, sizeof(guidDisConnectEx),

                  
    &fnDisConnectEx, sizeof(fnDisConnectEx),

                  
    &dwByte, NULL, NULL);

     

         mDisconnectExFunc 
    = fnDisConnectEx;

     

         
    return NULL != mDisconnectExFunc ? 0 : -1;

    }

    //2、调用

    LPFN_DISCONNECTEX fnDisConnectEx 
    = (LPFN_DISCONNECTEX)mDisconnectExFunc;

         
    if( NULL != fnDisConnectEx ) {

             
    return fnDisConnectEx( fd, lpOverlapped, dwFlags, reserved );
         }


    以上代码在xp以上系统中没必要那么麻烦,可以直接使用DisconnectEx函数。

    查看msdn只要是带有Ex后缀的都是微软专有扩展函数,如AcceptEx,ConnectEx等。

  • 相关阅读:
    Vim怎么批量处理文件将tab变为space
    猫狗模型代码
    googLeNet网络
    Alex网络
    搭建FTP服务器
    除非Microsoft FTP 服务(FTPSVC)正在运行,否则无法启动FTP站点。服务目前已停止
    FTP文件夹打开错误,Windows无法访问此文件夹
    win7系统中ftp服务器搭建方法(多图)
    windows server 2008服务器IIS绑定阿里云域名
    URL Routing
  • 原文地址:https://www.cnblogs.com/hjblog/p/1877782.html
Copyright © 2020-2023  润新知