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