Какова стоимость WSAStartup и WSACleanup?

У меня есть Win32 программа на C++, которая использует сокеты для загрузки некоторых данных с сервера.

Перед использованием сокетов в Windows необходимо вызвать WSAStartup. MSDN говорит: "Должен быть вызов WSACleanup для каждого успешного вызова WSAStartup. Только последний вызов функции WSACleanup выполняет фактическую очистку".

Самым простым способом для меня является вызов WSAStartup/WSACleanup каждый раз, когда я загружаю множество данных с сервера. Большую часть времени будет только одно соединение за раз, так что WSACleanup будет выполнять фактическую очистку.

Вот почему мне интересно, какова стоимость WSAStartup и WSACleanup? Я имею в виду для выполнения фактической очистки. Если вызовы WSAStartup и WSACleanup длятся недолгое время по сравнению со всем соединением с сокетом, я могу использовать простой способ. Если нет, я должен позаботиться о вызове WSACleanup только при выходе из программы.

3 ответа

WSAStartup() загружает необходимые библиотеки. Но если DLL уже загружена, WSAStartup() просто увеличивает счетчик. WSACleanup() уменьшает счетчик и освобождает dll, когда счетчик достигает нуля.

Вы должны вызвать WSAStartup() в функции init вашего приложения и WSACleanup () непосредственно перед выходом из приложения.

Просто позвоните в WSAStartup один раз и никогда не убирайте. Серьезно, это своего рода оставшаяся архитектура от Win3.1 и Win32s.

Используйте RAII, чтобы загрузить их только один раз при запуске приложения, а затем освободить их при выходе...

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