On Fri, 5 Jan 2007, Darren Reed wrote:

If one were to use the socket option SO_RCVBUF, there is an expectation that the system will at some point fill that buffer if there is enough data written before I do a read.

Assuming that the receive-buffer can be fully filled with user-data is wrong. ;) Just cause there's only a few bytes in the receive buffer does /not/ mean the receive buffer has space left. :)

This application, presuming it can also run over non-TCP-fusion, also is assuming:

- how the system accounts non-data bytes to the receive buffer
  - deeply implementation specific and un-application-relevant
- in how many packets the data is transferred possibly (not
  deterministic, even if the app /does/ know exactly how the system
  buffers)

Even if this application is only ever meant to run on Solaris and TCP loopback, there's no guarantee that:

- the application actually will get tcp fusion (various administrative
  actions can cause fusion to be disabled, e.g. do_tcp_fusion), if it
  gets TCP the buffering behaviour will be completely different again.
- that the admin won't have tweaked tcp_fusion_burst_min

We document the above in Bigadmin. ;)

Or have I got the wrong end of the stick?

regards,
--
Paul Jakma,
Network Approachability, KISS.           Sun Microsystems, Dublin, Ireland.
http://opensolaris.org/os/project/quagga tel: EMEA x19190 / +353 1 819 9190

_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to