Comment la fonction WSAStartup initie-t-elle l’utilisation de la DLL Winsock?

Comment la fonction WSAStartup initie-t-elle l’utilisation de la DLL Winsock?

Selon la documentation

La fonction WSAStartup doit être la première fonction Windows Sockets appelée par une application ou une DLL. Il permet à une application ou à une DLL de spécifier la version de Windows Sockets requirejse et d’extraire des détails sur l’implémentation spécifique de Windows Sockets. L’application ou la DLL ne peut émettre d’autres fonctions Windows Sockets qu’après avoir appelé WSAStartup.

Cette fonction initialise la structure de données WSADATA , mais en programmation de socket, nous ne transmettons pas WSDATA à aucune fonction. Comment le programme parvient-il à connaître la version de Windows Sockets et d’autres détails?

Par exemple dans ce code

 #include  #include  #pragma comment(lib, "ws2_32") void Run(int argc, char* argv[]) { char* host = argc 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"); } 

Dans cet exemple, je suis en WSADATA initialiser la structure de données WSADATA l’aide de la fonction WSAStartup() . Après wsaData je ne passe wsaData part à wsaData .

Comment mon programme parvient-il à connaître les détails de wsaData ?

Merci.

WSAStartup a deux objectives principaux.

Tout d’abord, il vous permet de spécifier quelle version de WinSock vous souhaitez utiliser (vous demandez 2.2 dans votre exemple). Dans le WSADATA qu’il remplit, il vous indiquera la version qu’il vous propose en fonction de votre demande. Il fournit également d’autres informations que vous n’êtes pas obligé de consulter si vous n’êtes pas intéressé . Vous ne devez plus jamais envoyer cette structure WSADATA à WinSock, car elle sert uniquement à vous donner des informations sur votre demande WSAStartup.

La deuxième chose à faire est de configurer tous les “éléments cachés” dont votre application a besoin pour utiliser des sockets. Le fichier DLL WinSock est chargé dans votre processus et comporte de nombreuses structures internes à configurer pour chaque processus. Ces structures vous sont masquées, mais elles sont visibles pour chacun des appels WinSock que vous passez.

Comme ces structures doivent être configurées pour chaque processus utilisant WinSock, chaque processus doit appeler WSAStartup pour initialiser les structures dans son propre espace mémoire et WSACleanup pour les supprimer à nouveau, une fois l’utilisation des sockets terminée.