> Alejandro Santillan wrote:
>
> > Bill, I was using your solution successfully to read several messages
sent
> > by the server, but when trying to work some request,
> > which had a longer answer, your buffer only gets:
> ...
> > How could I modify your routine, which is the following:
> >
> > my $buffer;
> > my $bytes = sysread ($handle, $buffer, 1024);
> > if (not defined $bytes or $bytes < 0) {
> > #err
> > print "error!!!";
> > } elsif ($bytes == 0) {
> > # EOF
> > }
> > return $buffer;
> >
> > In order to get the full answer and avoid the program to hang.
>
> 1) Increase the size of the read to more than 1024.
> 2) Optionally add a print on the error and EOF lines and return
> -1 and 0 to the caller to indicate err and EOF.  Test for those
> two conditions in the calling code and handle them accordingly
> (at least indicate to the user what happened with a diagnostic
> message).
> 3) Before doing the next read, make sure you do a select on the
> socket to make sure that data is available.
> 4) Since the data in the buffer is in a stream, you will need to
> find where each record begins and ends and possibly concatenate
> data from two reads to complete a single record when the record
> spans the read boundary.

It seems that increasing the buffer more thant 1024 didn't help in all
cases. It seems that this stream of data comes in several packets and the
terminator string is !END!
I've tried reading one byte at a time, using an $i as offset, and checking
whenever the END pattern showed up

my $buffer;
$i=1;
while($buffercomplete=~/END/){
$bytes = sysread ($handle, $buffer, 1,$i);
$buffercomplete=$buffercomplete.$buffer;
$i++;
}
return $buffer;

but it doesn't read a line,
whereas:
> > my $buffer;
> > my $bytes = sysread ($handle, $buffer, 1024);
> > if (not defined $bytes or $bytes < 0) {
> > #err
> > print "error!!!";
> > } elsif ($bytes == 0) {
> > # EOF
> > }
> > return $buffer;
does read seven lines, and increasing the 1024 to 8192 the reading is the
same, and it does not include the !END! pattern



_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to