WSAEnumProtocols的用法

#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")

void main(void)
{
     WSADATA wsaData;
     WSAStartup( MAKEWORD( 2, 2 ), &wsaData );

     LPWSAPROTOCOL_INFO info = NULL;
     DWORD dwLen;

     //因为info还未分配内存,第一次调用必定会失败,但能够得到dwLen的值
     if (SOCKET_ERROR == WSAEnumProtocols(NULL, info, &dwLen))
     {
         int iErrorCode = GetLastError();
         if (WSAENOBUFS != iErrorCode)
         {
             WSACleanup();
             return;
         }                
     }

     if (dwLen > 0)
     {

       //如果没有分配内存这一步,将会出错,只传递 &inof是没有用的,注意指针的用法
        info = (LPWSAPROTOCOL_INFO)GlobalAlloc(GPTR, dwLen);
         if (info == NULL)
         {
             printf("Allocate memory failed! ErrorCode is %d", GetLastError());
             WSACleanup();
             return;            
         }

         //第二次调用
         int iProtocolCounts = WSAEnumProtocols(NULL, info, &dwLen);    
         if (SOCKET_ERROR == iProtocolCounts)
         {
             printf("WSCEnumProtocols Error: %d", GetLastError());
             GlobalFree(info);
             WSACleanup();
             return;    
         }

         //打印本机安装的协议信息
         for (int i=0; i<iProtocolCounts; i++)
         {
             printf("\ni=%d\nProtocolDescription:%s\n", i, info[i].szProtocol);            
         }

         GlobalFree(info);    
     }
     WSACleanup();
}

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值