请输入您要查询的百科知识:

 

词条 WSAEnumProtocols()
释义

简述:获取现有传送协议的相关信息。

#include <winsock2.h>

int WSAAPI WSAEnumProtocols ( LPINT lpdwProtocols,

LPWSAPROTOCOL_INFO lpProtocolBuffer,

LPDWORD lpdwBufferLength);

lpdwProtocols:一个以NULL结尾的协议标识号数组。本参数可选;如果lpdwProtocols为 NULL,则返回所有可用协议的信息,否则的话只返回数组中所开列的协议信息。

lpProtocolBuffer:一个用PROTOCOL_INFO结构填充的缓冲区。参见下文中对PROTOCOL_INFO结构的具体描述。

lpdwBufferLength:输入时,存有传递给WSAEnumProtocols()函数的lpProtocolBuffer缓冲区长度。输出时,表示为获取所有信息需传递给WSAEnumProtocols()函数的缓冲区长度。本函数不能重复调用;传入的缓冲区必须足够大以能存放所有的元素。这个规定降低了该函数的复杂度。由于一个机器上装载的协议数目往往是很小的,所以并不会产生问题。

返回值:

若无错误发生,WSAEnumProtocols()返回协议的数目。否则的话,将返回INVALID_SOCKET错误,应用程序可通过WSAGetLastError()来获取相应的错误代码。

错误代码:

WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。

WSAENETDOWN 网络子系统失效。

WSAEINPROGRESS 一个阻塞WinSock调用正在进行。

WSAEINVAL 参数中有非法值。

WSAENOBUFS 缓冲区太小,无法保存所有PROTOCOL_INFO结构及其相关信息。传入的缓冲区大小至少应等于lpdwBufferLength中返回的值。

使用技巧

通常需要两次调用WSAEnumProtocols()函数以获取特定的协议信息,第一次调用时指定lpdwProtocols为 NULL,调用肯定是失败的,但参数lpdwBufferLength包含了所以协议信息需要的缓冲区长度。我们知道了这个准确长度就可以进行第二次调用了!

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/31 13:01:08