$ ./epoll
epoll_wait: 1, 00000005, 4
read: 8
epoll_wait: 0, 00000005, 4
epoll_wait timed out
$ uname -a
Linux xxx.yyy.ru 2.6.17-1.2187_FC5 #1 SMP Mon Sep 11 01:16:59 EDT 2006 x86_64
x86_64 x86_64 GNU/Linux
на lkml подписываться из-за этого не буду, но могу подтвердить.
Igor Sysoev wrote:
С прилагаемым тарболлом нужно проделать следующее:
tar zxf epoll.tar.gz
cd epoll
make
После чего в каталоге epoll будет две программы: epoll и server.
Нужно запустить их в двух терминалах. Сначала server, он будет слушать
на 127.0.0.1:9000, потом epoll, он будет соединяться с сервером.
Сервер должен показать следующее:
-----------
./server
accept
close, sleep 60s
-----------
epoll, если ошибки нет, должен показать:
-----------
./epoll
epoll_wait: 1, 00000004, 4
epoll_wait: 1, 00000005, 4
read: 8
epoll_wait: 1, 00000005, 4
read: 0
eof read
-----------
и если ошибка есть, то
-----------
./epoll
epoll_wait: 1, 00000004, 4
epoll_wait: 1, 00000005, 4
read: 8
epoll_wait: 0, 00000005, 4
epoll_wait timed out
-----------
Ошибка воспроизводится не всегда, у меня получилось воспроизвести на
Linux 2.6.13-15.11-smp из SuSE 10. Если у вас ошибка тоже воспроизвелась,
то подписывайтесь на lkml и шлите туда баг-репорт вместе с прилагаемым
test-case'ом. Заодно спросите, почему постоянно приходят нотификации
EPOLLOUT - в данном случае она должна приходить только первый раз.
Возможно, ошибка проявляется не только в epoll, а просто в потере сигнала
закрытия сокета.
Игорь Сысоев
http://sysoev.ru