My typo. This: my $sel = IO::Socket->new( $socket ); should have been: my $sel = IO::Select->new( $socket );.
Try this:
#!perl -w
use strict;
use IO::Socket::INET;
use IO::Select;
my $channel_id = open_channel("127.0.0.1", "7777");
sub open_channel {
# create a connecting socket
my $host = shift;
my $port = shift;
my $timeout = 5;
if ( $host !~ m/(\d+)\.(\d+)\.(\d+).(\d+)/i ) {
print "IP Address:'$host' is not a Valid IP-Address.";
return 139;
}
my $socket = new IO::Socket::INET (
PeerHost => $host,
PeerPort => $port,
Proto => 'tcp',
);
die "cannot connect to the server $!\n" unless $socket;
my $sel = IO::Select->new( $socket );
if ( !defined $socket ) {
print "Opening TCP Channel to host: $host and Port: $port Fail
+ed !!";
return 138;
}
else {
$socket->send("Check Connectivity");
while (1) {
my @ready = $sel->can_read( $timeout )
or do{
print "=> Time-Out as no data received for '$timeo
+ut sec'.!!\n";
last;
};
my $recieved_data= <$socket>;
if ( defined $recieved_data ) {
chomp($recieved_data);
if ($recieved_data =~ /Connected to TCP socket server/
+i){
print "TCP Connection established with Channel id:
+ '$socket'\n";
return $socket;
}
else{
print "Cannot craete connection with server\n";
return 137;
}
}
}
$socket->close();
}
}
Note: this is still untested code. The idea is that you should look at the docs for IO::Select and try to understand what the above code is suggesting.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|