X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fclient.pl;h=459c26323a34480131247918043d9124649962dd;hb=cf33b1fa05b8e3489232a4e57f0ba2542b0e7a64;hp=fb86542f394dbfdf760d56acb1fe0402c5d0eceb;hpb=3eb9538d135d9ff21d8ce7c0e0c6b3e6d7fb59a9;p=spider.git diff --git a/perl/client.pl b/perl/client.pl index fb86542f..459c2632 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -41,10 +41,10 @@ BEGIN { use Msg; use DXVars; use DXDebug; +use Net::Telnet qw(TELOPT_ECHO); use IO::File; use IO::Socket; use IPC::Open2; -use Net::Telnet qw(TELOPT_ECHO); use Carp qw{cluck}; # cease communications @@ -98,7 +98,7 @@ sub rec_socket cease(1); } if (defined $msg) { - my ($sort, $call, $line) = $msg =~ /^(\w)(\S+)\|(.*)$/; + my ($sort, $call, $line) = $msg =~ /^(\w)([A-Z0-9\-]+)\|(.*)$/; if ($sort eq 'D') { my $snl = $mynl; @@ -209,12 +209,13 @@ sub doconnect $port = 23 if !$port; # if ($port == 23) { + $sock = new Net::Telnet (Timeout => $timeout, Port => $port); $sock->option_callback(\&optioncb); $sock->output_record_separator(''); - $sock->option_log('option_log'); - $sock->dump_log('dump'); - $sock->option_accept(Wont => TELOPT_ECHO); +# $sock->option_log('option_log'); +# $sock->dump_log('dump'); + $sock->option_accept(Dont => TELOPT_ECHO, Wont => TELOPT_ECHO); $sock->open($host) or die "Can't connect to $host port $port $!"; # } else { # $sock = IO::Socket::INET->new(PeerAddr => "$host:$port", Proto => 'tcp') @@ -261,6 +262,7 @@ sub dochat for (;;) { if ($csort eq 'telnet') { $line = $sock->get(); + cease(11) unless $line; # the socket has gone away? $line =~ s/\r\n/\n/og; chomp; } elsif ($csort eq 'ax25' || $csort eq 'prog') { @@ -268,6 +270,10 @@ sub dochat $line = <$rfh>; $line =~ s/\r//og; } + if (length $line == 0) { + dbg('connect', "received 0 length line, aborting..."); + cease(11); + } dbg('connect', "received \"$line\""); if ($abort && $line =~ /$abort/i) { dbg('connect', "aborted on /$abort/"); @@ -491,7 +497,7 @@ Msg->set_event_handler($stdin, "read" => \&rec_stdin); for (;;) { my $t; - Msg->event_loop(1, 0.010); + Msg->event_loop(1, 1); $t = time; if ($t > $lasttime) { if ($outqueue) {