LINUX.ORG.RU

unix AIX , poll() ?


0

0

Столкнулся со странным поведением poll() в AIX делаю всё как обычно , в xxx.events =POLLIN ... После запуска программа как и положено ожидает в poll() нужное событие, но после прихода первого события и его обработки, poll() перестаёт стопорить программу и всегда вовращает 1 ,при этом xxx.revents =0 на всех дескрипторах как будто ничего не произошло. Если кто то с этим сталкивался, подскажите пожалуйста решение . У кого какие мысли по этому поводу ? Спасибо.

anonymous

Ответ на: комментарий от anonymous

в корку валится? тогда gdb? покажи как поллишь и что за события и до этого не делаешь ли чего нить что могло бы вызвать падение?

fura13 ★★★
()

После того, как poll() вернул (например), что дескриптор 5 доступен для чтения, его надо вычитать до конца, т.е. до тех пор, пока он не перестанет быть читабельным. Для этого сокет надо (сразу после создания) перевести в O_NONBLOCK. И читать до тех пор, пока не получишь EAGAIN.

Это потому, что select() и poll() level-triggered. Вот epoll() и kqueue() -- egde-triggered, то есть возвращают событие только тогда, когда состояние сокета меняется (обычно с "неготов" на "готов").

Но в AIX нет ни epoll(), ни kqueue(), ни /dev/poll...

iliyap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.