Heyho!
Fuer Multiplexing-Server - sprich 1 Prozess, der "zeitlgiech" mehrere Clienten bedient - nutze ich normalerweise folgendes Konstrukt:
Mit TCP-Sockets funktioniert das einwandfrei, wenn ich das ganze jetzt aber mit einem UNIX-Socket versuche:
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
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