UNIX-Socket Multiplexing

Heyho!

Fuer Multiplexing-Server - sprich 1 Prozess, der "zeitlgiech" mehrere Clienten bedient - nutze ich normalerweise folgendes Konstrukt:
Code:
use IO::Socket::INET;
use IO::Select;

my $socket = IO::Socket::INET -> new(
   proto => 'tcp',
   listen => SOMAXCONN,
) or die $!;

my $select = IO::Select -> new( $socket );

while( 1 ){
   foreach( $select -> can_read ){
      if( $_ == $socket ){
         $select -> add( $_ -> accept );
      }
      else {
         # client-anfrage bearbeiten...
      }
   }
}

Mit TCP-Sockets funktioniert das einwandfrei, wenn ich das ganze jetzt aber mit einem UNIX-Socket versuche:
Code:
use IO::Socket::UNIX;
use IO::Select;

my $socket = IO::Socket::UNIX -> new(
   type => SOCK_STEAM,
   local => '/var/tmp/sock',
   listen => SOMAXCONN,
) or die $!;

my $select = IO::Select -> new( $socket );

while( 1 ){
   foreach( $select -> can_read ){
      if( $_ == $socket ){
         $select -> add( $_ -> accept );
      }
      else {
         # client-anfrage bearbeiten...
      }
   }
}

und ein Client verbindet, spuckt mir 'can_read' jedesmal den Client-Socket aus, egal ob etwas auf den Socket geschrieben wurde oder nicht. Das ist eigentlich nicht sinn der Sache...

Warum funktioniert obiges Beispiel nicht?
Gibts eine Alternative Multiplexing-Loesung fuer UNIX-Sockets?

MfG
- Keks
 
Zurück
Oben