私は、epoll ベースのイベント ループを使用して複数の同時ソケット接続を処理するプログラムに取り組んでいます。アプリは、読み取るデータがあることを検出すると、バッファリングされた IO を使用する process_request() サブルーチンを呼び出します。例えば:
sub process_request {
my ( $fh ) = @_;
if ( my $line = <$fh> ) {
# Do something interesting
}
}
問題は、ここでバッファリングされた I/O を使用することにより、epoll はバッファ内に未読のデータが待機していることを認識しないため、再度 process_request() を呼び出さないことです。
問題は、Perl のファイルハンドルに未読のデータがあるかどうかをどのように検出して、データがバッファに残っている限り process_request() を再度呼び出すことができるかということです。