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
细节的呢?
谢谢。