Reading through the man page of the Linux system call sendfile
, I am wondering whether it is possible for the calling program to know when in_fd
is at EOF. Presumably, this could be signaled by a return value of 0, but this leads to the question of what a return value of 0 actually means. If sendfile
is like write
, then a return value of 0 would just mean that 0 bytes were copied. But, if sendfile
is like read
, then a return value of 0 would mean EOF. Must one know in advance how many bytes that are to be copied from in_fd
to out_fd
in order to use sendfile
? What does it mean when sendfile
returns 0?
views:
45answers:
1
+2
A:
I don't think there is any direct way to know that but it shouldn't really matter. Normally you would find the input file size via stat/fstat
and use that to count out your transfer. The socket end isn't going to matter to you.
The only situation this should be problematic is if you want to transfer a file that is growing or shrinking. Given that the input file has to be mmap-ed, and the bad things that can happen (without some clever code) with mmap in those situations you should probably just not employ sendfile for those cases.
Duck
2010-09-12 23:38:07