sendfile() in FileChannelImpl.c

Michael Allman msa at allman.ms
Sun Oct 18 23:14:12 PDT 2009


On Sun, 18 Oct 2009, Greg Lewis wrote:

> G'day Michael,
>
> On Fri, Oct 16, 2009 at 04:55:08PM -0700, Michael Allman wrote:
>> Can someone explain why we aren't using sendfile() in the transferTo0 call
>> for the case of a file transfer to a network socket in FileChannelImpl.c?
>>
>> Also, my understanding is that if this call cannot do a sendfile(), it
>> should return IOS_UNSUPPORTED_CASE.  This will tell the caller to do a
>> loop-based transfer (see sun.nio.ch.FileChannelImpl.transferTo(), line
>> 531).
>
> I think the reason is basically historical.  I don't recall there being
> a fallback when we originally ported the NIO code, so sendfile() didn't
> make sense since it only transferred to network sockets.
>
> Before switching I'd want to see what sort of affect that had performance
> wise on the case of transferring to a file descriptor.

Hi Greg,

>From a Darwin perspective, it would be awful nice if Apple open-sourced 
their implementation.  I recall finding a while back that Apple's Java 
runtime used sendfile() by using DTrace.

Thanks for the info.  If I had a knowledge of C++ and system programming 
on BSD platforms, I'd be happy to submit a patch.

Cheers,

Michael



More information about the bsd-port-dev mailing list