Lösung mit einem Prozeß III

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

chatserver.pl
my %handler = (
   $socket => {
      'read' => \&new_participant,
      'handle' => $socket,
   },
);
my $read = new IO::Select;
$read->add($socket);
my $write = new IO::Select;
my %nickname = ();

while (my @sets = IO::Select->select($read, $write)) {
   foreach my $handle (@{$sets[0]}) {
      &{$handler{$handle}->{'read'}}($handle);
   }
   foreach my $handle (@{$sets[1]}) {
      &{$handler{$handle}->{'write'}}($handle);
   }
}

*%handler ist die zentrale Datenstruktur, die für jede offene Verbindung den aktuellen Status hält.
 
*Das Modul IO::Select unterstützt den Systemaufruf select(2), der den Prozeß blockiert, bis eines von vielen Ereignissen in Zusammenhang mit offenen Verbindungen eintritt (oder ein Zeitlimit verstreicht).
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1996, 1998, 1999, 2000 Andreas Borchert, in HTML konvertiert am 07.02.2000