TCP issue with large packet under RTEMS
Eric Norum
wenorum at lbl.gov
Wed Feb 9 16:55:10 UTC 2011
TCP (SOCK_STREAM) receivers always need to expect to have to complete their reads in multiple operations -- you need to put your read call in a loop:
char *buf;
ssize_t nleft, nread;
.
.
.
buf = .....
nleft = .....
while (nleft) {
nread = read(sd, buf, nleft);
if (nread < 0)
error......
if (nread == 0)
end-of-file......
buf += nread;
nleft -= nread;
}
On Feb 9, 2011, at 8:36 AM, João Rasta wrote:
> Hi,
>
> I'm using RTEMS 4.10 and GRETH MAC in order to exchange data with a client PC via TCP. I have a LEON-3 based processor architecture. I can successfully attach the GRETH ethernet driver using the RTEMS driver manager and exchange small ammounts of data. However, when i need to transfer an image array (436160Bytes) from the PC to the RTEMS system, the read() call only returns 17508Bytes read instead of 436160Bytes .
>
> The send() directive in the PC side returns the correct number of bytes sent so the problem must be on the RTEMS side. The read buffer has the correct size.
>
> 1) Is there any programmable limitation related to the number of bytes to receive? Since i'm using a TCP socket, there is no apparent reason for byte loss i guess..
>
> 2) In what circumstances should read() from a TCP socket return less bytes than the ones sent?
>
>
> Best,
> JM
>
--
Eric Norum
wenorum at lbl.gov
More information about the users
mailing list