On Sat, May 27, 2023 at 5:35 PM Xiang Xiao <xiaoxiang781...@gmail.com> wrote:
> On Sat, May 27, 2023 at 8:19 PM Fotis Panagiotopoulos <f.j.pa...@gmail.com > > > wrote: > > > Hello, > > > > I encounter some problems using sendfile(). > > > > I am using sendfile to... send a file to a remote server, with my own > > implementation of an FTP client. > > sendfile() indeed starts to transmit chunks of the file, but as I see in > > Wireshark, I get an ICMP response "Destination unreachable (Fragmentation > > needed)". > > I have verified that the Ethrenet MTU is correctly set to 1500. > > > > I tried lowering the MTU a lot (1000 bytes), and the problem is solved. > > Communication succeeds. > > > > This raises some questions, and indicates some potential bugs: > > > > 1. Why is there a problem with MTU in the first place? Shouldn't MTU be > > negotiated? (Is this functionality available in NuttX?) > > > > MTU isn't negotiated but a physical attribute of your transport(netdev). On > the other hand, PMTU could be discovered from ICMP. > I am not very familiar with MTU negotiation, so it seems that it doesn't happen in the network layer that I thought... > > > > 2. Why is the ICMP response not handled? It seems that sendfile() just > > ignores it and continues to send chunks, nevertheless. > > > > It is handled by the recent addition here: > https://github.com/apachey/nuttx/pull/9254 > <https://github.com/apache/nuttx/pull/9254> > but this feature is disabled by default, you have to enable it manually.. > I will definitely take a look at this. Thank you. > > > > 3. Why sendfile() sends TCP segments without receiving any ACKs back? > > AFAIK, depending on the configuration, TCP allows at most two pending > > segments on the wire. But I see dozens of them, till sendfile finally > > fails. > > > > > Why only two segments? TCP can send packages until the slide window is > full. > > Disregard this. I was confused with delayed ACKs. Which is a receiver's functionality, not a sender's... > > > This last point is also verified in my MQTT client. > > I have seen NuttX TCP allowing sending lots of TCP segments without > ACKing > > the previous data. > > > > So, is there any insight on the above? > > Is my configuration wrong, or is there anything wrong with TCP? > > > > Thank you. > > >