Perl -Win32- 다른 프로세스에서 파일 핸들을 비 블로킹하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/141332

문제

Stdin을 통해 클라이언트 프로세스와 대화하는 서버 코드를 작성하고 있습니다. 나는 클라이언트의 stdout으로부터 응답을 비동기로받는 Perl 코드 스 니펫을 작성하려고합니다. 코드의 차단 버전은 다음과 같습니다.

sub _read_from_client
{
   my ($file_handle) = @_;
   while (my $line = <$file_handle>) {
      print STDOUT $line;
   }
   return;
}

중요한 것은 스 니펫이 Win32 플랫폼에서 작동해야합니다. 관심이없는 *닉스 플랫폼에 대한 많은 솔루션이 있습니다. ActivePerl 5.10을 사용하고 있습니다.

도움이 되었습니까?

해결책

이 스레드 ~에 Perlmonks 이 방법으로 Perl의 Windows에서 소켓을 차단하지 않을 수 있다고 제안합니다.

ioctl($socket, 0x8004667e, 1);

해당 스레드의 자세한 내용과 리소스

다른 팁

저수준 경로로 가고 싶지 않다면 다른 프레임 워크 솔루션을 살펴 봐야합니다.

당신은 a를 사용할 수 있습니다 입력에서 읽고 모든 데이터를 글타래 (쓰레드) :: 대기열 그런 다음 메인 스레드에서 처리합니다.

당신은 볼 수 있습니다 특히 이벤트 기반 프레임 워크를 구현합니다 poe :: 휠 :: run :: win32. 잠재적으로, 당신은 또한 코드를 훔쳐서 비 차단 읽기를 구현할 수 있습니다.

Coroutines를 사용하여 협력적인 멀티 태스킹 시스템을 구현하는 [Coro]를 볼 수 있습니다. 이것은 시스템 스레드가 아닌 사용자 공간 스레드를 얻는 것을 제외하고는 스레드와 유사합니다.

당신은 얼마나 멀리 가고 싶은지 말하지 않았지만 당신의 선택은 sysread 그리고 프레임 워크 또는 글을 쓴 프레임 워크 직접. 가장 쉬운 경로는 스레드를 사용하거나 코드를 통과하는 것입니다. Poe::Wheel::Run::Win32.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top