Я работаю над программой, которая использует основанный на epoll цикл обработки событий для обработки нескольких одновременных соединений сокетов. Когда приложение обнаруживает, что есть данные для чтения, оно вызывает подпрограмму process_request (), которая использует буферизованный ввод-вывод. Например:
sub process_request {
my ( $fh ) = @_;
if ( my $line = <$fh> ) {
# Do something interesting
}
}
Проблема в том, что при использовании буферизованного ввода-вывода здесь epoll не знает, что в буфере ожидают непрочитанные данные, поэтому он больше не вызывает process_request ().
Итак, вопрос в том, как я могу определить, есть ли непрочитанные данные в дескрипторе файла в Perl, чтобы я мог снова вызывать process_request (), пока данные остаются в буфере?