AcceptEx без WSAIoctl - PullRequest
       2

AcceptEx без WSAIoctl

2 голосов
/ 17 декабря 2010

Существует ли какая-либо разница между использованием прямого вызова AcceptEx или использованием указателя функции, полученного WSAIoctl.

MSDN не полностью охватывает этот вопрос, касающийся проблемы производительности и других проблем, с которыми можно столкнуться при использовании AcceptEx в качестве прямого вызова.

И еще один вопрос: если у меня, например, 4 прослушивающих сокета в моей программе, нужно ли мне вызывать WSAIoctl для каждого прослушивающего сокета и, конечно, сохранять указатель функции для каждого сокета?Или достаточно вызвать его один раз для любого сокета, а затем использовать с другими.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 23 июля 2011

Вызов функции без предварительного получения указателя на функцию (то есть путем связывания с mswsock.lib и непосредственного вызова AcceptEx) является дорогостоящим, поскольку AcceptEx находится за пределами многоуровневой архитектуры Winsock2.AcceptEx должен запрашивать указатель на функцию, используя WSAIoctl, для каждого вызова, если нет вероятности того, что приложение на самом деле пытается вызвать AcceptEx от провайдера, размещенного поверх mswsock (см. Рисунок 3).Чтобы избежать такого существенного снижения производительности при каждом вызове, приложение, которое намеревается использовать эти API, должно получать указатели на эти функции непосредственно от многоуровневого поставщика, вызывая WSAIoctl.

From http://msdn.microsoft.com/en-us/magazine/cc302334.aspx

4 голосов
/ 19 января 2011

WSAIoctl. Это поставщик расширений, который вы используете для новых функций / дополнений к функциональности winsock, каждая новая версия Windows обычно добавляет пару новых расширений.

Указатель функции AcceptEx: Использование AcceptEx напрямую связывает приложение с поставщиком Microsoft с необходимостью MSWsock.dll. Что касается корректности, вы, вероятно, должны сделать это способом msdn и использовать функции через расширение.

Просто настройте его один раз и используйте, как если бы вы использовали MSWsock-AcceptEx (вы все равно будете использовать то же самое)

Что касается скорости / производительности, я бы предложил вместо этого сконцентрироваться на объединении сокетов.

Edit: Следует уточнить (msdn) причину разделения - Расширения - это специфические функции Microsoft, которые другие поставщики не должны реализовывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...