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