Receiving message written by writev() in multiple chunks

Alexander Senier alex at ...331...
Thu Aug 3 17:21:31 CEST 2017


Hi all,

when using writev() on a TCP socket, I get a behavior that is unexpected, although it may OK by the specification. My test program is using the
libc_lwip_loopback plugin.

I create a TCP socket, bind it so some address/port and put it into listening mode. Then, I create another socket, connect to that port and
write and IOVEC referencing 3 buffers using writev(). The buffers have a total length of 17 which is returned as a length by the writev().

When reading from the socket using recv(), I'd expect it to return 17 bytes with are identical with the content of the IOVEC. Instead, I need to
perform two recv() calls, the first returning the first buffer of the IOVEC and the second returning the buffers 2 and 3 of the IOVEC concatenated.

Find example code here [1].

As I said, this may be perfectly legal behavior. OTOH, Linux and Android behave as expected and there may be code relying on it. Any thoughts on
this issue?

Thanks!

Cheers,
Alex

[1] https://github.com/senier/componolit/blob/issue16/src/test/mfe/writev_socket_short/main.cc




More information about the users mailing list