【发布时间】:2009-11-18 18:33:57
【问题描述】:
我正在开发一个使用基于 epoll 的事件循环来处理多个同时套接字连接的程序。当应用程序检测到有数据要读取时,它会调用一个 process_request() 子程序,该子程序使用缓冲 IO。例如:
sub process_request {
my ( $fh ) = @_;
if ( my $line = <$fh> ) {
# Do something interesting
}
}
麻烦的是这里使用缓冲I/O,epoll不知道缓冲区中有未读数据在等待,所以它不会再次调用process_request()。
那么问题来了,如何在 Perl 中检测文件句柄中是否有未读数据,以便只要数据还在缓冲区中就可以再次调用 process_request()?
【问题讨论】:
-
我撤回了我的错误答案。这里的关键点是,当缓冲区中没有任何内容时,您希望停止处理 ,但是您希望稍后会有更多数据到达缓冲区,并且您想做其他事情而不是阻塞等待它。