저는 epoll 기반 이벤트 루프를 사용하여 여러 개의 동시 소켓 연결을 처리하는 프로그램을 만들고 있습니다. 앱이 읽을 데이터가 있음을 감지하면 버퍼링 된 IO를 사용하는 process_request() 하위를 호출합니다. 예를 들어 :Perl의 입력 파일 핸들 버퍼에 데이터가 있는지 어떻게 알 수 있습니까?
sub process_request {
my ($fh) = @_;
if (my $line = <$fh>) {
# Do something interesting
}
}
문제는 여기에 I/O를 버퍼 사용하여이 process_request()를 다시 호출하지 않습니다, 그래서는 epoll은, 버퍼에 대기 읽지 않은 데이터가 있다는 것을 알고하지 않습니다.
Perl의 파일 핸들에 읽지 않은 데이터가 있는지 어떻게 확인할 수 있습니까? 그래서 데이터가 버퍼에 남아있는 한 process_request()를 다시 호출 할 수 있습니까?
잘못된 대답을 취소했습니다. 여기에서 중요한 점은 버퍼에 아무것도 남아 있지 않을 때 <$fh> 처리를 중지하고 나중에 더 많은 데이터가 버퍼에 도착할 것으로 예상하고 기다리지 않고 다른 작업을 수행하려는 경우입니다. –