sub q3msg { my ($host, $port, $timeout, $msg) = @_; my $iaddr = gethostbyname(hostname()); my $sin = sockaddr_in(0, $iaddr); =document socket(SOCK, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket: $!\n"; bind(SOCK, $sin) or die "bind: $!\n"; =cut my $sock = new IO::Socket::INET(Proto => "udp", LocalAddr => $iaddr, LocalPort => 0) or die "failed to create UDP socket"; my $hisaddr = inet_aton($host) or die "unknown host \"$host\"\n"; my $srvaddr = sockaddr_in($port, $hisaddr); #defined(send(SOCK, chr(255) x 4 . $msg, 0, $srvaddr)) or die "send: $!\n"; defined(send($sock, chr(255) x 4 . $msg, 0, $srvaddr)) or die "send: $!\n"; my ($rin, $rout); $rin = ""; vec($rin, fileno(SOCK), 1) = 1; if (select($rout=$rin, undef, undef, $timeout)) { #recv(SOCK, $_, 65507, 0) or die "recv: $!\n"; recv($sock, $_, 65507, 0) or die "recv: $!\n"; s/\033.//g; my @response = split /^/m; shift @response; return \@response; } else { return undef; } }