Monks,
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 side
while(@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;
}
}
}
Client side
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. |