in reply to Re: IO::Select - reading multiple lines
in thread IO::Select - reading multiple lines
I've many questions raising now., Let me tell what's in my mind.
So, is it a very worse idea to use <$fh> to read from a socket? Because, it is failing straight away without doing lot of magic(stuffs) in the code.
Server sideClient sidewhile(@ready = $sel->can_read) { if($fh == $lsn) { # Accept the socket $new = $lsn->accept; $sel->add($new); print "New client accepted\n"; print $new "abc\n"; print $new "abcd\n"; print $new "abcde\n"; print $new "abcdef\n"; } else { # Process socket $a = <$fh> ; if (not defined $a) { $sel->remove($fh); $fh->close; print "Client closed\n"; } else { print $a; } } }
while(@ready = $sel->can_read) { foreach $fh (@ready) { my $rr = <$fh>; exit if ( not defined $rr ); print $rr; } }
In the above sample, client is receiving only abc(first message) sent by server. When server quits, can_read is returning and client is receiving the remaining messages, not blocking. Getting messages one after another.
Then, I tried with sysread as suggested here. When using sysread, should I read byte by byte till '\n'? Because, I don't know the size of the message. Is it a good way to read byte by byte, do concatenation and then process the message?(I don't think so.)
Please, explain me some way to write a error free way(pleasant way too) to receive messages in socket.. or let me know what am I doing wrong.
Thanks.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: IO::Select - reading multiple lines
by zentara (Archbishop) on Jul 14, 2011 at 19:20 UTC | |
by nagalenoj (Friar) on Jul 15, 2011 at 12:16 UTC | |
by zentara (Archbishop) on Jul 15, 2011 at 12:23 UTC |