¿Cómo funciona WSAStartup inicia el uso de la DLL de Winsock?¿Cómo funciona WSAStartup inicia el uso de la DLL de Winsock?
De acuerdo con la documentación
La función WSAStartup debe ser el primera función de Windows sockets llamada por una aplicación o DLL. Permite una aplicación o una DLL para especificar la versión de Windows Sockets required y recuperar detalles de la implementación específica de Windows Sockets . La aplicación o DLL solo puede emitir otras funciones de Windows Sockets después de llamar con éxito a WSAStartup.
Esta función inicializa WSADATA
estructura de datos, pero en la programación del zócalo que no pasan WSDATA
a cualquier función de modo, ¿cómo el programa llega a saber acerca de la versión de Windows Sockets y otros detalles?
Por ejemplo, en el código
#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");
}
En este ejemplo estoy inicializando estructura de datos utilizando WSADATA
WSAStartup()
función y después de las salas no estoy pasando wsaData
en cualquier lugar.
Entonces, ¿cómo llega a saber mi programa wsaData
detalles?
Gracias.
Además, consulte este enlace: http://stackoverflow.com/questions/1869689/is-it-possible-to-tell-if-wsastartup-has-been-called-in-a-process en un anterior pregunta que hice y descubrí la respuesta a través del autodescubrimiento. – Matt
Gracias por la explicación. – Searock
@Matt H Gracias por la información adicional. – Searock