|
|
| 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 |