WSAStartup函数如何启动Winsock DLL的使用?

WSAStartup函数如何启动Winsock DLL的使用? 根据文件   WSAStartup函数必须是   首先调用Windows套接字函数   通过应用程序或DLL。它允许一个   应用程序或DLL来指定   需要Windows套接字版本   并检索具体的细节   Windows套接字实现。该   应用程序或DLL只能发出   Windows套接字功能   成功调用WSAStartup后。 这个函数初始化
WSADATA
数据结构,但在套接字编程中我们不会将
WSDATA
传递给任何函数,那么程序如何了解Windows套接字版本和其他细节呢? 例如,在此代码中
#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: %sn", 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");
}
在这个例子中,我使用
WSAStartup()
函数初始化
WSADATA
数据结构,在病房之后我没有在任何地方传递
wsaData
。 那么我的程序如何了解
wsaData
的详细信息? 谢谢。     
已邀请:
WSAStartup有两个主要目的。 首先,它允许您指定要使用的WinSock版本(您在示例中请求2.2)。在它填充的WSADATA中,它将根据您的请求告诉您它为您提供的版本。如果您不感兴趣,它还会填写您不需要查看的其他信息。您永远不必再次将此WSADATA结构提交给WinSock,因为它纯粹用于向您提供有关WSAStartup请求的反馈。 它做的第二件事是设置你的应用程序需要使用套接字的所有“幕后工作”。 WinSock DLL文件被加载到您的进程中,它有很多内部结构需要为每个进程设置。这些结构对您来说是隐藏的,但是您对每个WinSock调用都可以看到它们。 因为需要为使用WinSock的每个进程设置这些结构,所以每个进程必须调用WSAStartup来初始化其自己的内存空间中的结构,并且WSACleanup在完成使用套接字时再次将它们拆除。     

要回复问题请先登录注册