rgo
написал 10 июля 2006 года в 01:25 (1218 просмотров)
Ведет себя
неопределенно; открыл 61 тему в форуме, оставил 1603 комментария на сайте.
согласно всяким туторам/докам/книгам, с которыми я сталкивался, select надо использовать примерно так:
while (...) { FD_ZERO (&fds) /* всякие там FD_SET */ /* ... */ ret = select (..., &fds, ...); }
всё замечательно, но вот вопрос который мне покоя не даёт: почему FD_ZERO вечно внутри цикла? зыркал в apache, там тоже FD_ZERO в цикле. Почему никто не пользует FD_CLR?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
select изменяет fds. Например перед вызовом select мы положили (FD_SET) 10, 12, 18 файловые дескрипторы (fd) в сет. После вызова select fds может содержать например только один fd==12 на котором есть какая либо активность (например пришло чтоьто). Для упрощения проверок и кода и используют: FD_ZERO; FD_SET… FD_SET. в цикле.
По поводу FD_CLR:
Другая альтернатива:
угу, наверное, всё-таки так.
да и наверное, тк дескрипторов не очень много, memcpy + FD_CLR + FD_SET, не сильно выгоднее чем FD_ZERO + FD_SET.