NiTr0 Опубликовано 4 августа, 2011 (изменено) · Жалоба Немного не тематический вопрос знатокам. Итак, имеется некий демон, который общается с ком-портом и отправляет/забирает данные; + к тому он общается по сети. Ожидание событий (поступление данных в буффер tty либо соединение с сокетом) реализовано через select() Итого имеем такой кусочек кода: if (FD_ISSET(tty.fd, &sdsetrd)) logw(5, "conn_loop(): select(): tty.fd is present"); rc = select(max_sd + 1, &sdsetrd, &sdsetwr, NULL, &t_out); ioctl(tty.fd, FIONREAD, &i); logw(5, "conn_loop(): select(): %d descriptors ready, there are %d bytes in buffer", rc, i); И этот кусочек кода при наличии в буфере всего 1 байта выдает парадоксальный результат: 1312484897:018074 conn_loop(): select(): tty.fd is present 1312484897:109351 conn_loop(): select(): 0 descriptors ready, there are 1 bytes in buffer Т.е. - select() считает буфер tty, содержащий 1 байт, пустым, и возвращает управление по тайм-ауту (~100 мсек). При наличии в буффере 2 байт (или более) - все прекрасно работает. Багу выловил на ядре 3.0, но в 2.6.35.13, если не ошибаюсь, она тоже присутствовала. От системных библиотек (glibc/uclibc) не зависит. GCC 4.4.5. Собссно вопрос: это баг или я чего-то не понял из мануала? :) P.S. max_sd - заведомо больше номера дескриптора tty, так что собака не здесь порылась. Изменено 4 августа, 2011 пользователем NiTr0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 4 августа, 2011 · Жалоба Может tty недонастроен, или не в том режиме, например VMIN=2. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 4 августа, 2011 (изменено) · Жалоба например VMIN=2. Таки да. Спасибо за подсказку. Сам уже не один час голову ломал, а туда заглянуть и не додумался... Изменено 4 августа, 2011 пользователем NiTr0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...