set ^Z and ^V correctly
[spider.git] / perl / client.pl
index 1a57a1c6e983bb229d283fe4f040ff0aee9e3c2a..1914ab3179e53e54365c685a05b1022c95937f05 100755 (executable)
@@ -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;
@@ -163,7 +163,9 @@ sub rec_stdin
        #  $prbuf =~ s/\r/\\r/;
        #  $prbuf =~ s/\n/\\n/;
        #  print "sys: $r ($prbuf)\n";
-       if ($r > 0) {
+       if (!defined $r || $r == 0) {
+               cease(1);
+       } elsif ($r > 0) {
                if ($mode) {
                        $buf =~ s/\r/\n/og if $mode == 1;
                        $buf =~ s/\r\n/\n/og if $mode == 2;
@@ -189,9 +191,7 @@ sub rec_stdin
                } else {
                        $conn->send_later("I$call|$buf");
                }
-       } elsif ($r == 0) {
-               cease(1);
-       }
+       } 
        $lasttime = time;
 }
 
@@ -225,6 +225,8 @@ sub doconnect
                $rfh = new IO::File;
                $wfh = new IO::File;
                $pid = open2($rfh, $wfh, "$line") or die "can't do $line $!";
+               die "no receive channel $!" unless $rfh;
+               die "no transmit channel $!" unless $wfh;
                dbg('connect', "got pid $pid");
                $wfh->autoflush(1);
        } else {