title: Do other operating systems implement the Linux system call splice?
body: <p>In an application I am developing I use <a href="http://en.wikipedia.org/wiki/Splice_%28system_call%29" rel="noreferrer"><code>splice</code></a> on Linux for socket-to-socket data transfer.</p>
  
  <ol>
  <li>Do other operating systems (specifically at least Windows, OS X and FreeBSD) implement <code>splice</code> or an equivalent solution?</li>
  <li>Is it possible to imitate socket-to-socket data <code>splice</code>ing on Windows with <code>sendfile</code>¹ + <code>memmap</code>¹?</li>
  </ol>
  
  <hr>
  
  <p>¹ Both exist on Windows under different names which I do not remember.</p>
  
  <hr>
  
  <p><strong>Update</strong></p>
  
  <p>You can see the performance improvements of <code>splice</code> vs user space buffers on Linux.</p>
  
  <p><a href="//portfusion.sourceforge.net/i/plot/1.svg" rel="noreferrer"><img src="//portfusion.sourceforge.net/i/plot/1.png" alt="go"></a></p>
  
  <ul>
  <li><code>DF</code>, <code>DR</code>, <code>F</code>, <code>MF</code>, <code>MR</code> are my application in its different tunneling modes, <code>NX</code> is NGINX web server</li>
  <li><code>-p+t</code> uses the Linux system call <code>splice</code></li>
  <li><code>+p-t</code> uses a portable implementation with user space buffers</li>
  <li><code>+p+t</code> uses a portable implementation with user space buffers and multiple OS threads</li>
  <li>bars represent throughput in <strong>gigaBYTE</strong> s per second</li>
  <li>a single 1 gigabyte (1048576000 bytes) file was requsted 4 times by 4 concurrent clients</li>
  </ul>