sub send_rcon { my ($server, $port, $password, $command, %message_info) = @_; my $incoming; use IO::Socket; my $socket = IO::Socket::INET->new(PeerAddr => $server, PeerPort => $port, Proto => 'udp') or return "rcon: socket error [$!]."; if ($socket) { $socket->send(chr(255)x4 . "rcon $password $command") or return "rcon: send error [$!]."; $SIG{ALRM} = sub { scm($message_info{'irc_chan'}, "rcon: timed out.", $message_info{'kernel'}); }; eval { alarm (5); sysread($socket, $incoming, 1024) or return "rcon: return error [$1]."; alarm (0); close $socket; }; } return $incoming; }