Как функция WSAStartup инициирует использование Winsock DLL?
Согласно документации
Функция WSAStartup должна быть первая функция Windows Sockets с помощью приложения или DLL. Это позволяет приложения или DLL, чтобы указать требуется версия Windows Sockets и получить информацию о конкретных Реализация Windows Sockets. приложение или DLL могут выдавать дополнительные функции Windows Sockets после успешного вызова WSAStartup.
Эта функция инициализирует структуру данных WSADATA
, но при программировании сокетов мы не передаем WSDATA
какой-либо функции, так как программа узнает о версии Windows Sockets и других данных?
Например, в этом коде
#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
?
Спасибо.