Hallo,
Ich wollte ein kleiner Pler-prog schreiben, dass zwei Verbindungen zu IRC-Servern aufrechterhält. Ich mach also $sock1 und $sock2 mit new IO::Socket::INET und so..
und dann wie bei cpan.org oder auch hier in einem gewissen artikel beschrieben mit IO::Select->new eine schleife, die alle sockets managen kann.
Der relevante code ist folgender:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while(my @ready = $select->can_read)
{
foreach my $ts (@ready)
{
if($ts == $sock1)
{
my $input = <$sock1>;
chomp $input;
print "sock1: $input\n";
}
elsif($ts == $sock2)
{
my $input = <$sock2>;
chomp $input;
print "sock2: $input\n";
}
}
}
Ob das jetzt schön gecodet ist, sei mal dahingestellt, jedenfalls hab ich das problem, dass, wenn ich das programm im terminal starte, dann bekomme ich von einem irc-server über das socket ne ziemliche menge an infos. Aber nach ca 10 Zeilen bekomme ich keine Nachrichten mehr angezeigt für etwa 2 minuten, obwohl noch ettliches fehlt, was gesendet wird. Das kommt dann alles nach besagte 2 minuten auf einen schlag. Hat das irgenwas mit einem Puffer zu tun oder so, den ich bei select beachten muss?
wenn ich ein socket mit while (<$sock1>) auslese, habe ich diesen Fehler nicht und die zeilen werden alle genau dann ausgegeben, wenn sie vom irc-server gesendet werden.
Ich hoffe, ihr habt mein problem verstanden ;)
gruß, me²