@axchg

Могут ли быть проблемы при вызове WSAStartup() несколько раз?

Здравствуйте!

Есть Win32 приложение. Оно загружает несколько Win32 DLL библиотек, и из каждой вызывает некоторую функцию инициализации. DLL библиотеки скорее всего не знают о существовании друг друга, и каждая в своей функции инициализации вызывает WSAStartup().

DLL библиотеки написаны так, что они не все и не всегда проверяют, что возвращается в структуре с информацией из WSAStartup(). (проверяется только возвращаемое значение).

Вопрос. Какие могут быть с этим связаны проблемы? В случае, если, например, две разные DLL вызовут WSAStartup() с разными версиями? (Хотя, версии младше 2.0 не запрашиваются точно).

А как писать приложение? Если необходимо использовать три - пять сторонних DLL, про которые мы "ничего не знаем", а само приложение тоже должно использовать Windows Sockets ?

(подразумевается, что не используются трюки вроде перехвата обращений к win sock dll, и влиять на то, как инициализируются библиотеки, мы не можем)

(в случае, если только DLL из всего процесса работает с сетью (и соотв., WSAStartup() вызывается только один раз) - всё точно работает корректно).

Заранее большое спасибо!
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
Не будет никаких проблем. Из документации:

An application can call WSAStartup more than once if it needs to obtain the WSADATA structure information more than once. On each such call, the application can specify any version number supported by the Winsock DLL.


Надо только WSACleanup потом вызвать столько же раз, сколько вызывался WSAStartup
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы