diff options
author | root <root> | 2011-06-10 06:50:42 +0000 |
---|---|---|
committer | root <root> | 2011-06-10 06:50:42 +0000 |
commit | 5e8581f15bc308454846cb79c772083dab66b04f (patch) | |
tree | bfb5457293d59ab34cfbb22f46b8c2123f21bb10 | |
parent | f8670b89c4d7f8b6da5b3f7acf95c428b86d88ed (diff) |
*** empty log message ***
-rw-r--r-- | Changes | 3 | ||||
-rw-r--r-- | eio.c | 3 |
2 files changed, 6 insertions, 0 deletions
@@ -42,3 +42,6 @@ TODO: fadvise request combination EIO_READDIR_STAT_ORDER | EIO_READDIR_DIRS_FIRST. - port to openbsd (another blatantly broken non-UNIX/POSIX platform). - fix eio_custom prototype. + - work around a Linux (and likely FreeBSD and other kernels) bug + where sendfile would not transfer all the requested bytes on + large transfers, using a heuristic. @@ -1006,6 +1006,9 @@ eio__sendfile (int ofd, int ifd, off_t offset, size_t count, etp_worker *self) #elif defined (_WIN32) /* does not work, just for documentation of what would need to be done */ + /* actually, cannot be done like this, as TransmitFile changes the file offset, */ + /* libeio guarantees that the file offset does not change, and windows */ + /* has no way to get an independent handle to the same file description */ HANDLE h = TO_SOCKET (ifd); SetFilePointer (h, offset, 0, FILE_BEGIN); res = TransmitFile (TO_SOCKET (ofd), h, count, 0, 0, 0, 0); |