📄 14.3.1 wsastartup函数.txt
字号:
14.3.1 WSAStartup函数
在利用套接字编程时,第一步需要加载套接字库,这通过 WSAStartup函数来实现。该函数有两
个功能:一是加载套接字库,一是进行套接字库的版本协商,也就是确定将使用的 socket版本。
该函数的原型声明如下所示:
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
WSAStartup函数有两个参数,其含义分别如下所述:
. wVersionRequested
用来指定准备加载的 Winsock库的版本。高位字节指定所需要的 Winsock库的副版本,而低位字
节则是主版本。通常版本号为: 2.1,其中 2就是主版本号, 1就是副版本号。可以利用 MAKEWORD
(x, y)宏(其中 x是高位字节, y是低位字节)方便地获得 wVersion Requested的正确值。
. lpWSAData
这是一个返回值,指向 WSADATA结构的指针, WSAStartup函数用其加载的库版本有关的信息填
在这个结构中。
WSADATA结构的定义如下所示:
typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN +1] ;
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorlnfo;
} WSADATA , *LPWSADATA;
WSAStartup函数把 WSAData结构中的第一个字段 wVersion设置为打算使用的 Winsock版本。
wHighVersion字段容纳的是现有的 Winsock库的最高版本。记住,这两个字段中,高位字节代表
的是 Winsock副版本,而低位字节代表的则是 Winsock主版本。 szDescription和
szSystemStatus这两个字段由特定的 Winsock实施方案设定,事实上并没有用。不要使用下面这
两个字段: iMaxSockets和 iMaxUdpDg,它们是假定同时最多可打开多少套接字和数据报的最大
长度。然而,要知道数据报的最大长度应该通过 WSAEnumProtocols函数来查询协议信息。同时
最多可打开套接字的数目不是固定的,很大程度上和可用物理内存的多少有关。最后,
lpVendorlnfo字段是为 Winsock实施方案有关的指定厂商信息预留的,任何一个 Win32平台上都
没有使用这个字段。
如果 Ws2_32.lib或底层网络子系统没有被正确地初始化或没有被找到, WSAStartup 函数将返
回 WSASYSNOTREADY。此外,这个函数允许你的应用程序协商使用某种版本的 WinSock规范,如
果请求的版本等于或高于 WinSock动态库所支持的最低版本, WSAData的 wVersion成员中将包
含你的应用程序应该使用的版本,它是动态库所支持的最高版本与请求版本中较小的那个。反之,
如果请求的版本低于 WinSock动态库所支持的最低版本, WSAStartup函数将返回
WSAVERNOTSUPPORTED。关于 WSAStartup函数更详细的信息,请查阅 MSDN中相关内容。
对于每一个 WSAStartup函数的成功调用(即成功加载 WinSock动态库后),在最后都对应一个
WSACleanUp调用,以便释放为该应用程序分配的资源,终止对 WinSock动态库的使用。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -