|
chatserver.pl |
sub handle_read { my $handle = shift; my $buffer = ""; if (defined(sysread($handle, $buffer, 8192))) { my $handler = $handler{$handle}; $handler->{'ibuf'} .= $buffer; if ($handler->{'ibuf'} =~ /^(.*\n)(.*)/s) { if ($1 =~ /^\r?\n$/) { &{$handler->{'readline'}}($handle, ""); } else { foreach my $line (split /\r?\n/, $1) { &{$handler->{'readline'}}($handle, $line); } } $handler->{'ibuf'} = $2; } } else { quit($handle); } } |
handle_read arbeitet mit sysread, das direkt auf
read(2) zurückgeht, um die internen
Eingabepuffer von Perl zu umgehen (select(2)
funktioniert dafür nicht).
| |
read(2) bietet ferner das Entgegenkommen, auch dann
weniger zurückzuliefern (nämlich genau das, was im
Betriebssystemskern zur Verfügung steht), wenn mehr gefordert
wird (hier: 8192 Bytes).
|
Copyright © 1996, 1998, 1999, 2000 Andreas Borchert, in HTML konvertiert am 07.02.2000 |