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 - 2003 Andreas Borchert, in HTML konvertiert am 01.10.2003