4878b7729c
Do not bother to preserve segment boundaries in the tcp readahead queues. * Avoid wasting the tail IOB space for each segments. Instead, pack the newly received data into the tail space of the last IOB. Also, advertise the tail space as a part of the window. * Use IOB chain directly. Eliminate IOB queue overhead. * Allow to accept only a part of a segment. * This change improves the memory efficiency. And probably more importantly, allows less-confusing recv window advertisement behavior. Previously, even when we advertise N bytes window, we often couldn't actually accept N bytes. Depending on the segment sizes and IOB configurations, it was causing segment drops. Also, the previous code was moving the right edge of the window back and forth too often, even when nothing in the system was competing on the IOBs. Shrinking the window that way is a kinda well known recipe to confuse the peer stack. |
||
---|---|---|
.. | ||
Kconfig | ||
Make.defs | ||
tcp_accept.c | ||
tcp_appsend.c | ||
tcp_backlog.c | ||
tcp_callback.c | ||
tcp_close.c | ||
tcp_conn.c | ||
tcp_connect.c | ||
tcp_devpoll.c | ||
tcp_finddev.c | ||
tcp_getsockopt.c | ||
tcp_input.c | ||
tcp_ipselect.c | ||
tcp_listen.c | ||
tcp_monitor.c | ||
tcp_netpoll.c | ||
tcp_notifier.c | ||
tcp_recvfrom.c | ||
tcp_recvwindow.c | ||
tcp_send_buffered.c | ||
tcp_send_unbuffered.c | ||
tcp_send.c | ||
tcp_sendfile.c | ||
tcp_seqno.c | ||
tcp_setsockopt.c | ||
tcp_timer.c | ||
tcp_txdrain.c | ||
tcp_wrbuffer_dump.c | ||
tcp_wrbuffer.c | ||
tcp.h |