Comment la fonction WSAStartup initie-t-elle l'utilisation de la DLL Winsock?
Comment WSAStartup fonction déclenche l'utilisation de la DLL Winsock?
Selon la documentation
La WSAStartup fonction, doit être le
premier Windows Sockets fonction appelée
par une application ou la DLL. Il permet à un
l'application ou la DLL pour spécifier le
la version de Windows Sockets nécessaire
et de récupérer des détails spécifiques
Implémentation Windows Sockets. L'
l'application ou la DLL ne peut émettre de
outre les fonctions de Windows Sockets
après le succès de l'appel de WSAStartup.
Cette fonction initialise WSADATA
structure de données, mais dans le support de la programmation, nous ne passez pas WSDATA
pour toute fonction alors, comment fonctionne le programme est livré à savoir sur les Sockets Windows version et d'autres détails?
Par exemple, dans ce 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");
}
Dans cet exemple, je suis de l'initialisation WSADATA
structure de données à l'aide de WSAStartup()
fonction et, peu après, je ne suis pas de passage wsaData
n'importe où.
Alors, comment est-ce que mon programme est livré à savoir sur wsaData
détails?
Grâce.
source d'informationauteur Searock
Vous devez vous connecter pour publier un commentaire.
WSAStartup a deux objectifs principaux.
Tout d'abord, il vous permet de spécifier quelle version de WinSock que vous souhaitez utiliser (vous demandez 2.2 dans votre exemple). Dans le WSADATA qu'il remplit, il va vous dire de quelle version il vous offre en fonction de votre demande. Elle remplit également dans certains autres informations qui vous n'êtes pas obligé de regarder si vous n'êtes pas intéressé. Vous n'avez jamais à soumettre cette WSADATA struct pour WinSock encore, parce qu'il est utilisé uniquement pour vous donner des informations sur votre WSAStartup demande.
La deuxième chose qu'il fait, est de mettre tous les "coulisses trucs" que votre application doit utiliser des sockets. Le WinSock DLL fichier est chargé dans votre processus, et il a tout un tas de structures internes qui doivent être réglées pour chaque processus. Ces structures sont cachés, mais ils sont visibles à chaque WinSock appels que vous effectuez.
Parce que ces structures doivent être mis en place pour chaque processus qui utilise WinSock, chaque processus doit appeler WSAStartup d'initialiser les structures à l'intérieur de son propre espace mémoire, et WSACleanup à déchirer vers le bas encore une fois, quand c'est fini à l'aide de sockets.