Winsock編程-WSAEnumProtocols()

來源:互聯網
上載者:User

WSAEunmProtocols  擷取系統上安裝的網路通訊協定相關資訊。

int WSAEnumProtocols (
LPINT

lpiProtocols
,
LPWSAPROTOCOL_INFO
lpProtocolBuffer
,
ILPDWORD
lpdwBufferLength
);

     lpdwProtocols:一個以NULL結尾的協議標識號數組。本參數可選;如果lpdwProtocols為 NULL,則返回所有可用協議的資訊,否則的話只返回數組中所開列的協議資訊。

  lpProtocolBuffer:一個用PROTOCOL_INFO結構填充的緩衝區。PROTOCOL_INFO結構用來存放或得到一個指定協議的完整資訊。

                     lpdwBufferL ength:輸入時,存有傳遞給WSAEnumProtocols()
函數的lpProtocolBuffer緩衝區長度。輸出時,表示為擷取所有資訊需傳遞給WSAEnumProtocols()函數的緩衝區長度。本函數
不能重複調用;傳入的緩衝區必須足夠大以能存放所有的元素。這個規定降低了該函數的複雜度。由於一個機器上裝載的協議數目往往是很小的,所以並不會產生問題。

傳回值:

  若無錯誤發生,WSAEnumProtocols()返回協議的數目。否則的話,將返回INVALID_SOCKET錯誤,應用程式可通過WSAGetLastError()來擷取相應的錯誤碼。

     通常需要兩次調用WSAEnumProtocols()函數以擷取特定的協議資訊,第一次調用時指定lpdwProtocols為
NULL,調用肯定是失敗的,但參數lpdwBufferLength包含了所以協議資訊需要的緩衝區長度。我們知道了這個準確長度就可以進行第二次調用
了!

 

#include "stdafx.h"
#include <malloc.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

int main(int argc, char* argv[])
{
 WSADATA wsa;
 WSAStartup(MAKEWORD(2,2),&wsa);

 DWORD dwLen;
 LPBYTE pBuf;
 LPWSAPROTOCOL_INFO pInfo;

 dwLen=0;
 int
nRet=WSAEnumProtocols(NULL,NULL,&dwLen);
 if(nRet==SOCKET_ERROR)
 {
  if (WSAGetLastError() !=
WSAENOBUFS)
  printf("Get dwLen
error!/n");
 }
 
 printf("緩衝區的大小:%d/n",dwLen);
 dwLen++;
 pBuf=(LPBYTE)malloc(dwLen);
 if(pBuf==NULL)
 {printf("Allocate protool buffer error/n");return
1;}
 
nRet=WSAEnumProtocols(NULL,(LPWSAPROTOCOL_INFO)pBuf,&dwLen);

  if(nRet==SOCKET_ERROR)
  {printf("EnumProtocols failed!/n");}

 pInfo=(LPWSAPROTOCOL_INFO)pBuf;
 for(int
nCount=0;nCount<nRet;nCount++)
 {
  printf("%s
/n",pInfo->szProtocol );
 pInfo++;
 }
  free(pBuf);
 WSACleanup();
 return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.