boost :: asio расширение TCP сокет

Я пытаюсь сделать расширение asio, похожее на Boost Socket, с реализацией как для Windows, так и Linux. Расширения будут использоваться для взаимодействия с сетью KNX с использованием EIBD для Linux. Вопрос в том, как контролировать несколько файловых дескрипторов. Если вы используете select (), как обойти ограничение FD_SETSIZE?

Как boost справляется с этим в реализации сокетов? Насколько мне известно, в Windows используется порты завершения ввода-вывода.

2

Решение

Краткий ответ на мой вопрос использует Epoll. В соответствии с википедия, epoll — это масштабируемый механизм уведомления о событиях ввода / вывода для Linux, впервые представленный в ядре Linux 2.5.44.

select (2) может отслеживать до FD_SETSIZE количества дескрипторов за раз, обычно небольшое количество, определяемое во время компиляции libc. Вместо этого epoll не имеет таких фиксированных ограничений и не выполняет линейное сканирование. Следовательно, он способен работать лучше и обрабатывать большее количество событий.

Для учебника о том, как использовать epoll, зайдите на banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/

Что касается Boost, на многих платформах Boost.Asio реализует шаблон проектирования Proactor в терминах Reactor, таких как select (ядро 2.4), epoll (ядро 2.6) или kqueue (Mac OS).

В Windows NT, 2000 и XP Boost.Asio использует перекрывающиеся операции ввода-вывода для обеспечения эффективной реализации шаблона проектирования Proactor.

Больше на Boost:

www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/overview/core/async.html

www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/design/implementation.html

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector