[Haskell-cafe] sendfile leaking descriptors on Linux?
jeremy at n-heptane.com
Thu Feb 4 21:05:20 EST 2010
We should start by testing if native sendfile leaks file descriptors even
when the whole file is sent. We have a test suite, but I am not sure if it
tests for file handle leaking...
On Thu, Feb 4, 2010 at 7:58 PM, Jeremy Shaw <jeremy at n-heptane.com> wrote:
> Well, that's not good.
> I wonder how we are supposed to know that the client has disconnected... We
> use withBinaryFile to open the file, so if an uncaught except is being
> thrown then that should close the file handle..
> If you look in Network.Socket.SendFile.Linux, you will see that when the C
> sendfile() function returns -1, we throw an exception, unless it is the
> EAGAIN error. So, that should cause us to close the files when an error
> There is one possible odd case.. if sendfile returns 0, then we assume
> nothing went wrong and keep trying to resend the data until everything is
> sent. If it keeps returning 0 then we just keep trying even though nothing
> is happening. (Or if we keep getting EAGAIN errors..). But I am not sure
> that either of these cases would actually happen in practice.
> Another cause might be if threadWaitWrite is just never returning after the
> client disconnects..
> - jeremy
> On Thu, Feb 4, 2010 at 1:43 PM, Bardur Arantsson <spam at scientician.net>wrote:
>> Hi all,
>> I've been using the sendfile package off Hackage, but it seems to be
>> leaking file descriptors when using the Linux-native build.
>> What's happening in my specific case is the following:
>> 1) client requests a range of a file
>> 2) server starts sending the range
>> 3) client disconnects before receiving the whole file
>> This happens over and over with the client requesting different ranges of
>> the file (so the client does make progress).
>> If I use the portable build of the sendfile package, everything works fine
>> for hours and hours of this happening.
>> If I use the Linux-native build of the sendfile package, the server
>> will eventually run out of file descriptors. According to "lsof" the files
>> that are being kept open are the data files being sent in 2) above.
>> This is on GHC 6.10.x (Ubuntu).
>> Is anyone else seeing this? Anyone got any idea what's going on?
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe