I'm going over your code for clues that may help me. In the meantime, here is the code I am working on. Server.pl works fine as is, but if I try to put the code inside a while loop (I have tried both inside the socket open/close calls and outside) it quits working.

edit: I changed my server.pl a bit based on what I saw in your example. This does not work. The while loop goes through the first iteration fine, and hangs up the second time through with a (error|warning) message of "Use of uninitialized value in substitution (s///) at /clocal/mptsgrp/user/mptsuser/scripts/guipartner.pl line 24, <GEN1> line 2."
The print statements I included for debug show that $incoming matched /.+/ even after it was set to "" on the first iteration, but it did fail the $command[0] eq "check" test. The killer, though, is that the while loop stopped there. "Hi" was never printed a third time. :-(
#!/usr/bin/perl use strict; use warnings; use IO::Socket; my $incoming; my $check; my @check; my @command; my $new_sock; my $sock = new IO::Socket::INET ( LocalPort => '8888', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!\n" unless $sock; $new_sock = $sock->accept(); while ($incoming = <$new_sock>){ print "hi"; if ($incoming =~ m/.+/){ print $incoming; @command = split / /,$incoming; $command[1] =~ s/\W+//g; $incoming = ""; if ($command[0] eq "check"){ $check = @check = `ps -ef |grep $command[1]`; print "$check\n@check\n"; if ($check >= 12) { print $new_sock "up"; } else { print $new_sock "down"; } }else{ print"did not work\n"; } } } close $sock;


Likewise, the client works, so long as I don't duplicate the code to send a second request to the server.
#!/usr/bin/perl use strict; use warnings; use IO::Socket; use Fcntl; my $input; my $sock; my $cs2; my $mqpcx; my $mpts; my $EOL = "\015\012"; my $BLANK = $EOL x 2; my $command; open OUT, "> testpage.html" or die "unable to write testpage"; ### OUT is temporary until I get cgi working. open FILE1, "< 1.html" or die; while (<FILE1>){print OUT} close FILE1; $sock = new IO::Socket::INET ( PeerAddr => '53.230.116.97', PeerPort => '8888', Proto => 'tcp', ); if ($sock){ print "Connection established\n"; $command = "check cs2" . $BLANK; print $sock $command; while ($cs2 = <$sock>){ last if ($cs2 =~ m/.+/); } if ($cs2 eq "up") { print OUT "<img src=\"./cs2up.gif\">\n"; $mpts++; print"so far, so good\n"; } elsif ($cs2 eq "down") { print OUT "<img src=\"./cs2down.gif\">\n"; } else { print "error getting data from other box"; } }else{ print OUT "<img src=\"./cs2down.gif\">\n"; print "no connection to other box"; } close($sock); close OUT; print "goodbye\n";

--
Believe nothing, no matter where you read it, or who said it - even if I have said it - unless it agrees with your own reason and your own common sense.
(Buddha)

In reply to Re^3: two-way socket works once only? by wolfger
in thread two-way socket works once only? by wolfger

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.