Lösung mit einem Prozeß X

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

chatserver.pl
sub broadcast {
   my ($from, $line) = @_;
   foreach my $handle (keys %handler) {
      send_msg($handler{$handle}->{'handle'},
               "$from: $line");
   }
}

sub send_msg {
   my ($handle, $line) = @_;
   my $handler = $handler{$handle};
   return unless defined $handler->{'obuf'};
   $write->add($handle) if @{$handler->{'obuf'}} == 0;
   push(@{$handler->{'obuf'}}, "$line\r\n");
}

*Bei einer Ausgabe an Klienten wird zunächst nur der entsprechende Ausgabe-Puffer ergänzt.
 
*Dabei ist darauf zu achten, daß die entsprechende Verbindung in die Menge $write aufgenommen wird, falls der Ausgabe-Puffer vorher leer war.
 
*Wenn Zeiger als Schlüssel in einem assoziativen Array verwendet werden (wie hier $handle bei %handler), dann liefert keys %handler keine verwertbaren Zeiger (Restriktion von Perl).
 

 [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