Какова стоимость WSAStartup и WSACleanup? - PullRequest
8 голосов
/ 28 декабря 2008

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 28 декабря 2008

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

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

3 голосов
/ 16 февраля 2009

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

2 голосов
/ 29 декабря 2008

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

...