What causes a recv syscall for a socket to sometimes return less than the request len?
michi1 at michaelblizek.twilightparadox.com
michi1 at michaelblizek.twilightparadox.com
Fri Sep 23 12:04:48 EDT 2016
Hi!
On 17:20 Wed 21 Sep , Daniel Ellis wrote:
> Howdy,
>
> I understand that data fragmentation happens across TCP packets, and in my
> case that is what is happening. The packets I'm seeing usually run around
> 1450 in length, and are always cut into two packets at the 1400 mark. This
> works fine most of the time, since the call to recv is being passed a len
> of 4096 (via Python's socket.recv, which I'm assuming is just a wrapper
> around the system call). But sometimes I'll get all of the data I request,
> even across TCP packet boundaries (so the full 1450 bytes), and other
> times, it stops at a single packet, at which point I need to make another
> recv call.
The recv() call currently returns:
- as soon as there is some data in the receive queue
- all the data which is in the queue, up your buffer size.
-Michi
--
programing a layer 3+4 network protocol for mesh networks
see http://michaelblizek.twilightparadox.com
More information about the Kernelnewbies
mailing list