timeout problem

Perl & Ruby

1 svar · 227 visningar · startad av henrikjohansson

Medlem sedan maj 2000360 inlägg
Trådstart#1

Här har jag knåpat ihop ett litet script som skall kolla status på half-life servrar. Den skickar iväg en liten sträng och väntar sedan på svar från en server i taget. Jag letade runt som en galning på nätet efter ett bra sätt att lösa så att inte $socket->recv väntar och väntar på ett svar som aldrig kommer (ifall servern är nere eller dyligt), jag hittade lite kod som funkar ibland och ibland inte :D. Skulle nån trevlig prick kunna säga vad som är fel och om jag kan förbättra något..
Jag har inte hållt på med perl innan så ge gärna förslag på vad jag gjort fel :)

#!/usr/bin/perl
use IO::Socket;

hl("cs.ih.nu","27000");
hl("cs.ih.nu");
hl("cs.ih.nu","27016");
hl("cs.ih.nu","27017");
hl("cs.ih.nu","27000");

sub hl {

my($ip, $p) = @_;
$port = $p;
if ($port EQ "") { $port = "27015" }

print "$ip:$port\n";
$socket = IO::Socket::INET->new(PeerPort => "$port",
                                 PeerAddr => "$ip",
                                 Proto    => "udp",
                                 Timeout  => $timeout) or die("Gick inte att skapa en anslutning till $ip");{

$socket->send("ÿÿÿÿinfostring\n");

 vec($rin, fileno($socket), 1) = 1;
	if (select($rout=$rin, undef, $eout=$rin, 2)) {	$socket->recv($rdata, 2048);
	}

if (index($rdata, 'map') == -1) {
	print "timeout\n";
}
else 
{
@hlinfo = split /\\/,$rdata;
for ($x=0;$x<100;$x++)
{
	$data = @hlinfo[$x+1];
	if (@hlinfo[$x] eq "map") { $map = $data };
	if (@hlinfo[$x] eq "players") {$players = $data };
	if (@hlinfo[$x] eq "max") { $max = $data };
	if (@hlinfo[$x] eq "hostname") { $hostname = $data };
}
print "online\n$hostname\n$map\n$players / $max\n";
}
}
print "\n";
}
Medlem sedan juni 20004 308 inlägg
#2

Du har inte sättit variabeln $timeout till något värde. Funkar det bättre då?

249 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)