Как функция WSAStartup инициирует использование Winsock DLL?

Как функция 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 ?

Спасибо.

15
задан MD XF 22 March 2017 в 17:59
поделиться