Efficient copying between sockets

Mike Silbersack silby at silby.com
Mon Nov 1 01:42:56 PST 2004


On Fri, 29 Oct 2004, Ollie Cook wrote:

> Good afternoon,
>
> I am currently writing a potentially high bandwidth (think fileserver)
> application which will proxy data from one PF_INET socket to another (no reason
> it has to be PF_INET, but that's how the application stands).

> In actual fact, I know in advance exactly how many bytes need to be copied from
> one socket to the other, so if there was any way of doing something like:
>
>  socket_redirect(sock_src, sock_dst, bytes_to_copy);
>
> it would be ideal. However I'd be very surprised if such a trivial way to do
> that did actually exist.
>
> If anyone has any advice at all on a more efficient way to copy data between
> sockets I'd be very glad to hear about it. The software is very much prototype
> at the moment, but I'd like to make it as efficient as possible from the
> beginning and this seems like a prime area for optimisation.

Splicing bytes from one socket's buffer to another socket's buffer should 
be relatively simple to do inside the kernel, but I don't think it's 
implemented anywhere at this point in time.

If you're really need that functionality, the best place to do it would 
probably be in sendfile; you could just extend it so that if two sockets 
are passed to it instead of a socket and file, it would do what you've 
described above.

Tell us how it works out. :)

Mike "Silby" Silbersack


More information about the freebsd-net mailing list