2010-10-29 2 views
-1

Я только что читал раздел о функции poll() в «Расширенном программировании Unix» второго издания от Marc Rochkind. В этом разделе автор упоминает, что poll() не поддерживается в Darwin 6.6, и я видел другие объекты в Интернете, которые показывают, что poll() эмулируется на OSX с помощью системного вызова select(). Я хочу использовать poll() для класса, на котором я работаю специально, потому что он может обслуживать большое количество сокетов, и меня беспокоит превышение лимита количества обработчиков файлов, которые select() может использовать. Если утверждения, которые я прочитал, верны, есть ли подходящая альтернатива select() или есть способ преодолеть ограничение FD_SETSIZE?Поддерживает ли OSX опрос()?

ответ

2

Опрос (2) был введен как слой над выбором (2) в 10.3 и получил встроенную реализацию в 10.4.

Современные системы на базе BSD внедрили poll() за последние несколько лет. Если вы получаете фактические выгоды от poll() (vs. select()), я бы рекомендовал использовать его. Даже в системах, которые по-прежнему эмулируют poll() с помощью select(), в худшем случае вы будете работать с select() с предельным штрафом.

Если вы находитесь в ситуации, когда масштабируемость select() никогда не будет приемлемой, BSD-производные системы имеют тенденцию иметь очень настроенный kqueue(2).

+0

В соответствии с http://marc.info/?l=log&m=111515776629581&w=2 возникла проблема с реализацией poll() в 10.4, что создало проблемы для тех, кто хочет использовать daemontools DJB. Я не знаю, было ли это исправлено. – Peter

Смежные вопросы