WSAStartup函数
WSAStartup 函数 WSAStartup 函数是 Windows Sockets API 的初始化函数,用于初始化 WSADATA 结构。该函数的原型是 `int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);`,它需要两个参数:`wVersionRequested` 和 `lpWSAData`。 `wVersionRequested` 是一个 WORD 类型的参数,用于指定 Windows Sockets API 的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号。 `lpWSAData` 是一个指向 WSADATA 结构的指针,用于接收 Windows Sockets 执行的数据。 WSAStartup 函数的返回值为 0 表示成功,如果返回非 0 值,表示出现错误,需要调用 WSAGetLastError 函数来获取错误码。 可能出现的错误值包括: * WSASYSNOTREADY:基础网络子系统没有准备好网络通信。 * WSAVERNOTSUPPORTED:Windows Sockets 版本不支持。 * WSAEINPROGRESS:一块 Windows Sockets 1.1 操作在进程中。 * WSAEPROCLIM:Windows Sockets 支持的任务数到达上限。 * WSAEFAULT:lpWSAData 不是一个有效指针。 在调用 WSAStartup 函数时,应用程序或 DLL 必须是第一个 Windows Sockets 函数。它允许应用程序或 DLL 指明 Windows Sockets API 的版本号及获得特定 Windows Sockets 实现的细节。应用程序或 DLL 只能在一次成功的 WSAStartup() 调用之后才能调用进一步的 Windows Sockets API 函数。 WSAStartup 函数的调用方和 Windows Sockets DLL 互相通知对方它们可以支持的最高版本,并且互相确认对方的最高版本是可接受的。在 WSAStartup() 函数的入口,Windows Sockets DLL 检查了应用程序所需的版本。如果版本高于 DLL 支持的最低版本,则调用成功,并且 DLL 在 wHighVersion 中返回它所支持的最高版本,在 wVersion 中返回它的高版本和 wVersionRequested 中的较小者。然后 Windows Sockets DLL 就会假设应用程序将使用 wVersion。 如果 WSDATA 结构中的 wVersion 域对调用方来说不可接收,它就应调用 WSACleanup() 函数,并且要么去另一个 Windows Sockets DLL 中搜索,要么初始化失败。 WSAStartup 函数的协议允许 Windows Sockets DLL 和 Windows Sockets 应用程序共同支持一定范围的 Windows Sockets 版本。如果版本范围有重叠,应用程序就可以成功地使用 Windows Sockets DLL。 下面是一个示例代码,演示如何使用 WSAStartup 函数: ```c WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return; } ``` 在这个示例中,我们首先定义了一个 WORD 类型的变量 `wVersionRequested`,用于指定 Windows Sockets API 的最高版本号。然后,我们定义了一个 WSADATA 结构的指针 `wsaData`,用于接收 Windows Sockets 执行的数据。我们调用 WSAStartup 函数,并检查返回值是否为 0,如果不是 0,则表示出现错误。