Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 May 2003 09:20:50 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        arch@freebsd.org
Subject:   Re: sendfile(2) SF_NOPUSH flag proposal
Message-ID:  <200305291620.h4TGKobi078312@apollo.backplane.com>
References:  <200305281755.h4SHtbu05504@windsor.research.att.com> <3ED5961E.5DE0F41B@mindspring.com>

next in thread | previous in thread | raw e-mail | index | archive | help
:Bill Fenner wrote:
:> Why not set PRUS_MORETOCOME on all but the final pru_send() call?
:
:If the file is larger than `sysctl net.inet.tcp.sendspace`, then
:this code in do_sendfile():
:
:                if (sbspace(&so->so_snd) < so->so_snd.sb_lowat) {
:                        if (so->so_state & SS_NBIO) {
:                                m_freem(m);
:                                sbunlock(&so->so_snd);
:                                splx(s);
:                                error = EAGAIN;
:                                goto done;
:                        }
:                        error = sbwait(&so->so_snd);
:
:will result in you sleeping with PRUS_MORETOCOME set, but with
:no more being sent because the send buffer doesn't get emptied,
:as it's waiting for more data to send.
:
:-- Terry

     Not unless the send buffer is substantially near the size of a single
     packet, which it isn't (it's far larger).  PRUS_MORETOCOME is smarter
     then that, Terry.  tcp_output() just uses it as a hint, it doesn't 
     unconditionally hold off a flush.

     The code to refer to is netinet/tcp_output.c around line 313 (in stable),
     in tcp_output().  The section within the if (len) { ... } sequence.
     This section does all tests related to sending a packet and as you can
     see TF_MORETOCOME will not prevent the data from being flushed the
     more there is enough to fill a packet.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305291620.h4TGKobi078312>