WSAStartup函数如何确定Sockets API版本

WSAStartup函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数.
                为支持日后可能和Windows Sockets 1.1有功能上差异的Windows Sockets实现及应用程序,在WSAStartup()中规定了一个协议.WSAStartup()的调用方和Windows Sockets DLL互相通知对方它们可以支持的最高版本,并且互相确认对方的最高版本是可接受的. 在WSAStartup()函数的入口,Windows Sockets DLL检查了应用程序所需的版本(可以有多个).如果应用程序所需版本中只要有一个版本高于DLL支持的最低版本,则调用成功并且DLL在wHighVersion中返回DLL所支持的最高版本,在 wVersion中返回DLL的高版本和wVersionRequested中的较小者.然后Windows Sockets DLL就会假设应用程序将使用wVersion.如果WSDATA结构中的wVersion域对调用方来说不可接收(指wVersion不在应用程序版本中), 它就应调用WSACleanup()函数并且要么去另一个Windows Sockets DLL中搜索,要么初始化失败.
      本协议允许Windows Sockets DLL和Windows Sockets应用程序共同支持一定范围的Windows Sockets版本.如果版本范围有重叠,应用程序就可以成功地使用Windows Sockets DLL.下列的图表给出了WSAStartup()在不同的应用程序和Windows Sockets DLL版本中是如何工作的:

应用程序版本   DLL版本   wVersionRequested   wVersion   wHighVersion   最终结果
1.1         1.1         1.1         1.1         1.1         use 1.1
1.0 1.1       1.0         1.1             1.0         1.0         use 1.0
1.0         1.0 1.1       1.0             1.0         1.1         use 1.0
1.1         1.0 1.1       1.1             1.1         1.1         use 1.1
1.1         1.0         1.1             1.0         1.0         失败
1.0         1.1         1.0             --         --   WSAVERNOTSUPPORTED
1.0 1.1       1.0 1.1       1.1             1.1         1.1         use 1.1
1.1 2.0       1.1         2.0             1.1         1.1         use 1.1
2.0         1.1         2.0             1.1         1.1         失败
公式:

应用程序所支持版本>=DLL最低版本,则

wHighVersion=DLL最高版本

wVersion=min{DLL最高版本,wVersionRequested}

应用程序可能使用wVersion

然后看wVersion是否在应用程序所支持版本中。

大家如果看不懂,只需要画2根平行线,分别有四种位置情况,完全重合,不重合,一部分重合,然后根据上面的公式可确定了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值