Wie initiiert die WSAStartup-Funktion die Verwendung der Winsock-DLL?
Laut Dokumentation
Die WSAStartup-Funktion muss die erste Windows Sockets-Funktion sein, die von einer Anwendung oder DLL aufgerufen wird. Es ermöglicht einer Anwendung oder DLL, die erforderliche Version von Windows Sockets anzugeben und Details der spezifischen Windows Sockets-Implementierung abzurufen. Die Anwendung oder DLL kann erst nach erfolgreichem Aufruf von WSAStartup weitere Windows Sockets-Funktionen ausgeben.
Diese Funktion wird initialisiert WSADATA
Datenstruktur, aber bei der Socket-Programmierung gehen wir nicht weiter WSDATA
zu irgendeiner Funktion, wie erfährt das Programm also von der Windows Sockets-Version und anderen Details?
Zum Beispiel in diesem Code
#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");
}
In diesem Beispiel initialisiere ich WSADATA
Datenstruktur verwenden WSAStartup()
Funktion und danach gehe ich nicht weiter wsaData
überall.
Also, wie kommt mein Programm zu wissen wsaData
Einzelheiten?
Danke.