WSAStartup関数はどのようにしてWinsockDLLの使用を開始しますか?
ドキュメントによると
WSAStartup関数は、アプリケーションまたはDLLによって呼び出される最初のWindowsSockets関数である必要があります。これにより、アプリケーションまたはDLLは、必要なWindows Socketsのバージョンを指定し、特定のWindowsSockets実装の詳細を取得できます。アプリケーションまたはDLLは、WSAStartupを正常に呼び出した後でのみ、さらにWindowsSockets関数を発行できます。
この関数WSADATA
はデータ構造を初期化しますが、ソケットプログラミングではどの関数にも渡さないWSDATA
ので、プログラムはどのようにしてWindowsSocketsのバージョンやその他の詳細を知るようになりますか?
たとえば、このコードでは
#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
詳細を知るようになるのでしょうか?
ありがとう。