0

WSAStartup() 可以在单个进程中多次调用,只要 WinSock dll 支持请求的版本并且对 WSAStartup() 和 WSACleanup() 的调用是平衡的。除此之外,允许使用不同 WinSock 版本的多个套接字。(参见这篇文章:是否可以判断 WSAStartup 是否已在进程中调用?

那么,这些不同的 WinSock 版本是如何共存的呢?

例如,如果我请求为我的应用程序使用特定的 WinSock 版本,并且我的应用程序还加载了恰好请求使用不同版本的第三方 dll,该怎么办?使用什么版本,何时使用?

4

1 回答 1

0

它在MS 文档中说-

如果应用程序需要多次获取 WSADATA 结构信息,则可以多次调用 WSAStartup。在每次这样的调用中,应用程序都可以指定 Winsock DLL 支持的任何版本号。

最后一句话暗示,这些后续调用实际上并没有请求不同的winsock版本,只是获取保存在wsadata.

如果您想在程序中间更改winsock版本,我想您可以调用WSACleanup(根据需要多次),然后用新的“重新开始”WSAStartup

于 2020-05-25T20:10:43.303 回答