Thread IO::Socket::INET - Client stirbt ohne Fehler (1 answers)
Opened by bloonix at 2008-04-03 19:32

bloonix
 2008-04-03 19:32
#107827 #107827
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Community,

mein Anliegen ist recht simple. Ich habe einen Client, der sich zum Server connected
und ein paar Daten abliefert. Angenommen, der Server stirbt oder beendet die
Verbindung. Wenn der Client dann versucht etwas zum Server zu senden, dann
stirbt der Client ohne eine einzige Fehlermeldung. Ich habe nichtmal die Chance
den Fehler mit eval{} abzufangen!

Hier zwei Testskripte:

server.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use strict;
use warnings;
use IO::Socket::INET;

my $socket = IO::Socket::INET->new(
LocalHost => '127.0.0.1',
LocalPort => 43618,
Type => SOCK_STREAM,
Listen => 10,
Reuse => 1,
) or die "server: can't open socket over port 43618";

warn "server initialized\n";

while ( 1 ) {

while (my $client = $socket->accept) {
my $request = <$client>;
chomp($request);
next unless $request;
warn "client pid: $request\n";

# close() um zu testen wie der Client darauf reagiert
close($client);
}

}

close($socket);


client.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;
use IO::Socket::INET;

my $socket = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 43618,
Proto => 'tcp',
Type => SOCK_STREAM,
) or die "client: can't connect to 127.0.0.1:43618";

warn "client connected to server\n";

while ( 1 ) {
warn "send pid to server\n";
eval { print $socket "$$\n" };
last if $@;
sleep 1;
}

warn "lost connection\n";
close($socket);


Code: (dl )
1
2
3
#> perl server.pl 
server initialized
client pid: 2270


Code: (dl )
1
2
3
4
5
#> perl client.pl 
client connected to server
send pid to server
send pid to server
send pid to server


Hier würde ich nun ein "Lost connection" erwarten, aber es kommt
einfach nichts. Lustig ist auch, dass client.pl erst beim 3. print() stirbt.

Hat jemand eine Ahnung, was da schief läuft?

Gruss,
bloonix
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread IO::Socket::INET - Client stirbt ohne Fehler