webForumDet fria alternativet

timeout problem

Perl & Ruby

1 svar · 202 visningar · startad av henrikjohansson

Medlem sedan maj 2000360 inlägg
Frågan#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å?

279 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
142 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
142 ms — ändringar (db)