VirtualBox

Ignore:
Timestamp:
Jul 7, 2014 3:58:35 PM (11 years ago)
Author:
vboxsync
Message:

NAT: Make sure guest will get window updates by scheduling TF_DELACK
on successful sowrite().

This code is a moral equivalent of calling tcp_output() for PRU_RCVD
in tcp_usrreq() of the real stack. This is intended to be a
minimalistic fix to prevent guest from being stuck after we close
offered window. Guest's persist timer eventually lets it continue,
but wastes a lot of wall time, making outbound transfers very slow.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r51138 r51905  
    860860    }
    861861    else if (!fConnectOnly)
     862    {
    862863        SOWRITE(ret, pData, so);
     864        if (RT_LIKELY(ret > 0))
     865        {
     866            /*
     867             * Make sure we will send window update to peer.  This is
     868             * a moral equivalent of calling tcp_output() for PRU_RCVD
     869             * in tcp_usrreq() of the real stack.
     870             */
     871            struct tcpcb *tp = sototcpcb(so);
     872            if (RT_LIKELY(tp != NULL))
     873                tp->t_flags |= TF_DELACK;
     874        }
     875    }
    863876    /*
    864877     * XXX If we wrote something (a lot), there could be the need
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette