in reply to Socket IO NO new line

Have you tried setting the input record separator (see perlvar)?

$sock->input_record_separator( 'ETX' );

Replies are listed 'Best First'.
Re^2: Socket IO NO new line
by tachyon-II (Chaplain) on May 07, 2008 at 02:36 UTC

    Much more elegant! Just a note that you can't set this on a per file handle basis so the calling syntax (that avoids warnings) is as shown below.

    use IO::Socket; $|++; IO::Handle->input_record_separator('END'); my $sock = new IO::Socket::INET( LocalHost => 'localhost', LocalPort => 1234, Proto => 'tcp', Listen => SOMAXCONN, Reuse => 1 ) or die "no socket :$!"; while ($new_sock = $sock->accept()) { while ( defined( my $line = $new_sock->getline) ) { print "Got: $line\n"; } }
Re^2: Socket IO NO new line
by pc88mxer (Vicar) on May 07, 2008 at 02:55 UTC
    I have a feeling that ETX in this case stands for the ASCII character Control-C (ASCII code 3). Similarly, STX stands for ASCII code 2, hence the reference to chr(02) and chr(03) in the OP's code. Perhaps the OP can verify that this is the case. In any case, setting the input record separator for the socket should work, e.g.:
    $sock->input_record_separator(chr(3)); while (<$sock>) { ... # $_ contains one complete message }

    For some history on what codes like STX and ETX originally were used for, see The ASCII Control Characters.

    Update: Just noticed this suspect line in the server code:

    $STX=chr(03);