WSADATA 结构 (winsock.h)

WSADATA 结构包含有关 Windows 套接字实现的信息。

语法

typedef struct WSAData {
  WORD           wVersion;
  WORD           wHighVersion;
#if ...
  unsigned short iMaxSockets;
#if ...
  unsigned short iMaxUdpDg;
#if ...
  char           *lpVendorInfo;
#if ...
  char           szDescription[WSADESCRIPTION_LEN + 1];
#if ...
  char           szSystemStatus[WSASYS_STATUS_LEN + 1];
#else
  char           szDescription[WSADESCRIPTION_LEN + 1];
#endif
#else
  char           szSystemStatus[WSASYS_STATUS_LEN + 1];
#endif
#else
  unsigned short iMaxSockets;
#endif
#else
  unsigned short iMaxUdpDg;
#endif
#else
  char           *lpVendorInfo;
#endif
} WSADATA;

成员

wVersion

类型: WORD

Ws2_32.dll 要求调用方使用的 Windows 套接字规范的版本。 高位字节指定次要版本号;低位字节指定主版本号。

wHighVersion

类型: WORD

Ws2_32.dll 可以支持的 Windows 套接字规范的最高版本。 高位字节指定次要版本号;低位字节指定主版本号。

当传递给 WSAStartup 函数的 wVersionRequested 参数中请求的版本是Ws2_32.dll可以支持的 Windows 套接字规范的最高版本时,此值与 wVersion 成员的值相同。

iMaxSockets

类型: 无符号短

可以打开的最大套接字数。 对于 Windows 套接字版本 2 及更高版本,应忽略此成员。

保留 iMaxSockets 成员是为了与 Windows 套接字规范 1.1 兼容,但在开发新应用程序时不应使用。 没有一个值可以适用于所有基础服务提供程序。 版本 2 中 Windows 套接字的体系结构已更改为支持多个提供程序, WSADATA 结构不再适用于单个供应商的堆栈。

iMaxUdpDg

类型: 无符号短

最大数据报消息大小。 对于 Windows 套接字版本 2 及更高版本,将忽略此成员。

保留 iMaxUdpDg 成员是为了与 Windows 套接字规范 1.1 兼容,但在开发新应用程序时不应使用。 版本 2 中 Windows 套接字的体系结构已更改为支持多个提供程序, WSADATA 结构不再适用于单个供应商的堆栈。 对于特定于特定 Windows 套接字服务提供程序和套接字类型的实际最大消息大小,应用程序应使用 getsockopt 在创建套接字后检索选项SO_MAX_MSG_SIZE的值。

lpVendorInfo

类型: char FAR*

指向供应商特定信息的指针。 对于 Windows 套接字版本 2 及更高版本,应忽略此成员。

保留 lpVendorInfo 成员是为了与 Windows 套接字规范 1.1 兼容。 版本 2 中 Windows 套接字的体系结构已更改为支持多个提供程序, WSADATA 结构不再适用于单个供应商的堆栈。 需要访问特定于供应商的配置信息的应用程序应使用 getsockopt 来检索特定于供应商的信息的选项PVD_CONFIG的值。

szDescription[WSADESCRIPTION_LEN + 1]

类型: char[WSADESCRIPTION_LEN+1]

NULL 结尾的 ASCII 字符串, Ws2_32.dll 将 Windows 套接字实现的说明复制到其中。 文本 (最多 256 个字符,) 可以包含除控制字符和格式字符以外的任何字符。 应用程序对此成员最可能的用途是将其显示 (状态消息中可能截断) 。

szSystemStatus[WSASYS_STATUS_LEN + 1]

类型: char[WSASYS_STATUS_LEN+1]

NULL 结尾的 ASCII 字符串, Ws2_32.dll 将相关状态或配置信息复制到其中。 仅当信息对用户或支持人员有用时, Ws2_32.dll 才应使用此参数。 不应将此成员视为 szDescription 参数的扩展。

注解

WSAStartup 函数通过进程启动 Windows 套接字 DLL 的使用。 WSAStartup 函数返回指向
lpWSAData 参数中的 WSADATA 结构。

的 wHighVersion 成员中返回的 Windows 套接字规范的当前版本
WSADATA 结构是 2.2 版,使用低字节中的主版本号和高字节中的次要版本号进行编码。 此版本的当前 Winsock DLL Ws2_32.dll支持请求以下任一版本的 Windows 套接字规范的应用程序:

  • 1.0
  • 1.1
  • 2.0
  • 2.1
  • 2.2
根据应用程序请求的版本,上述版本号之一是编码为低字节中的主版本号的值,以及 WSADATA 结构的 wVersion 成员中返回的高字节中的次要版本号。
注意如果成功调用 WSAStartup 后 wVersion 中的值至少为 2,则应用程序应忽略 WSADATA 中的iMaxsocketsiMaxUdpDglpVendorInfo 成员。 这是因为版本 2 中 Windows 套接字的体系结构已更改为支持多个提供程序,而 WSADATA 不再适用于单个供应商的堆栈。 引入了两个新的套接字选项来提供特定于提供程序的信息:SO_MAX_MSG_SIZE (替换 iMaxUdpDg 成员) ,PVD_CONFIG (允许) 发生任何其他特定于提供程序的配置。
 

示例

下面的示例演示如何使用 WSADATA 结构。

WORD wVersionRequested;
WSADATA wsaData;
int err;
 
wVersionRequested = MAKEWORD( 2, 2 );
 
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
    /* Tell the user that we could not find a usable */
    /* WinSock DLL.                                  */
    return;
}
 
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater    */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we      */
/* requested.                                        */
 
if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
    /* Tell the user that we could not find a usable */
    /* WinSock DLL.                                  */
    WSACleanup( );
    return; 
}
 
/* The WinSock DLL is acceptable. Proceed. */




要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 winsock.h (包括 Winsock2.h)

另请参阅

SOL_SOCKET套接字选项

套接字选项和 IOCTL

WSAStartup

getsockopt