Что произойдет, если в процессе происходит несколько вызовов WSAStartup, запрашивающих разные версии WinSock?

WSAStartup() может вызываться несколько раз в одном процессе, если запрашиваемая версия поддерживается DLL-библиотекой WinSock и что вызовы WSAStartup() и WSACleanup() сбалансированы. Кроме того, допускается использование нескольких сокетов с использованием разных версий WinSock. (см. этот пост: можно ли определить, вызван ли WSAStartup в процессе?)

В таком случае, как эти разные версии WinSock сосуществуют?

Например, что, если я запрашиваю использование определенной версии WinSock для моего приложения, и мое приложение также загружает сторонний dll, который запрашивает использование другой версии? Какая версия используется и когда?

0 ответов

Он говорит, что в документе MS -

Приложение может вызывать WSAStartup более одного раза, если ему необходимо получить информацию о структуре WSADATA более одного раза. При каждом таком вызове приложение может указать любой номер версии, поддерживаемый Winsock DLL.

Последнее предложение подразумевает, что эти последующие вызовы фактически не запрашивают другую версию winsock, а просто получают существующую, сохраненную в wsadata.

Если вы хотите изменить версию winsock в середине программы, я полагаю, вы могли бы вызвать WSACleanup (столько раз, сколько необходимо), и "начните заново" с нового WSAStartup

Другие вопросы по тегам