Winsock编程-WSAEnumProtocols()
来源:互联网 发布:淘宝会员通 编辑:程序博客网 时间:2024/05/16 01:38
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;
intnRet=WSAEnumProtocols(NULL,NULL,&dwLen);
if(nRet==SOCKET_ERROR)
{
if (WSAGetLastError() !=WSAENOBUFS)
printf("Get dwLenerror!/n");
}
printf("缓冲区的大小:%d/n",dwLen);
dwLen++;
pBuf=(LPBYTE)malloc(dwLen);
if(pBuf==NULL)
{printf("Allocate protool buffer error/n");return1;}
nRet=WSAEnumProtocols(NULL,(LPWSAPROTOCOL_INFO)pBuf,&dwLen);
if(nRet==SOCKET_ERROR)
{printf("EnumProtocols failed!/n");}
pInfo=(LPWSAPROTOCOL_INFO)pBuf;
for(intnCount=0;nCount<nRet;nCount++)
{
printf("%s/n",pInfo->szProtocol );
pInfo++;
}
free(pBuf);
WSACleanup();
return 0;
}
- Winsock编程-WSAEnumProtocols()
- winsock编程
- WinSock编程
- Winsock编程
- Winsock编程
- winsock编程
- Winsock编程
- winsock编程
- Winsock编程
- Winsock编程
- winsock编程
- winsock编程
- winsock编程
- Winsock编程框架
- VB中的Winsock编程
- Winsock 编程(序言)
- Winsock API 编程介绍
- winsock 编程之初步
- javascript中的Date对象
- Guest column: Comparing two approaches to real-time Linux
- 在oracle的子查询中使用some,any和all
- servlet之路(大学)---处理请求过程
- Apache的配置大全
- Winsock编程-WSAEnumProtocols()
- ACCESS 函数汇总
- linux设置smtp服务器
- ibm培训真的那么优厚?
- WPF FlowDocuments (1) – Images, Shapes and Tables
- method_exists函数
- Hosting Office in a WPF Application
- servlet之路(大学)---ServletConfig和ServletContext及init(…)方法
- 为什么子类不能访问基类的private成员?为什么要这样设计?