in reply to Detecting a port "in use" on localhost:$port
The following works for me, without timeouts, on both Linux and Windows XP SP2 and ActiveState perl 5.10.0:
use strict; use warnings; use Socket; my $host = 'localhost'; my $port = shift || '8888'; my $timeout = 30; my $result = portAlive(); print "result = $result\n"; sub portAlive { my $proto = getprotobyname('tcp'); my $iaddr = inet_aton($host); my $paddr = sockaddr_in($port, $iaddr); socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || warn "socket: $!"; eval { local $SIG{ALRM} = sub { die "timeout" }; alarm($timeout); connect(SOCKET, $paddr) || error(); alarm(0); }; if ($@) { close SOCKET || warn "close: $!"; # print "$hostname is NOT listening on tcp port $portnumber.\n"; return 0; } else { close SOCKET || warn "close: $!"; # print "$hostname is listening on tcp port $portnumber.\n"; return 1; } }
The code you posted is incomplete. Is it possible that your problem is elsewhere in your code?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Detecting a port "in use" on localhost:$port
by freddo411 (Chaplain) on Apr 22, 2009 at 01:51 UTC |