WSAStartup 函数如何启动 Winsock DLL 的使用?
根据文档
WSAStartup 函数必须是应用程序或 DLL 调用的第一个 Windows 套接字函数。它允许应用程序或 DLL 指定所需的 Windows 套接字版本并检索特定 Windows 套接字实现的详细信息。应用程序或 DLL 只能在成功调用 WSAStartup 后发出进一步的 Windows Sockets 函数。
该函数初始化WSADATA数据结构,但在套接字编程中我们不传递WSDATA给任何函数,那么程序如何知道 Windows 套接字版本和其他细节?
例如在这段代码中
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
void Run(int argc, char* argv[])
{
char* host = argc < 2 ? "" : argv[1];
struct hostent* entry = gethostbyname(host);
if(entry)
{
struct in_addr* addr = (struct in_addr*) entry->h_addr;
printf("IP Address: %s\n", inet_ntoa(*addr));
}
else
printf("ERROR: Resolution failure.\n");
}
int main(int argc, char* argv[])
{
WSADATA wsaData;
if(WSAStartup(0x202, &wsaData) == 0)
{
Run(argc, argv);
WSACleanup();
}
else
printf("ERROR: Initialization failure.\n");
}
在这个例子中,我正在WSADATA使用函数初始化数据结构WSAStartup(),之后我没有通过wsaData任何地方。
那么我的程序是如何知道wsaData细节的呢?
谢谢。