Hi Fotis, On 6/18/23, Fotis Panagiotopoulos <f.j.pa...@gmail.com> wrote: > Hello, > > Due to a bug in my application, the code tried to use sendfile() with zero > size. > > As I see, sendfile() will happily proceed, and it will block here: > https://github.com/apache/nuttx/blob/master/net/tcp/tcp_sendfile.c#L523 > > Obviously, it will never manage to send any data (as the requested size is > 0), > and after the timeout expires, it will return EAGAIN. >
Good finding! BTW, that is the default timeout value? I think conn->sconn.s_sndtimeo is only defined when people enable the CONFIG_NET_SOCKOPTS. > This seems a bit wrong to me. > Why not return immediately, but instead wait for the (inevitable) timeout? > Why not return a more meaningful error code, or maybe just 0? > I was going to suggest avoid sending a packet with 0 byte, but it is supported: https://www.quora.com/Can-TCP-send-0-byte-packets https://github.com/golang/go/issues/10940 See, technically it is not an error! :-) > I couldn't find what the standards dictate for this edge case, so maybe the > current behavior is correct. > > What do you think? > I think it is correct, but most servers will just ignore it and you will end-up with a timeout. BR, Alan