| Add the story of xsendfile to the source. - geomyidae - A small C-based gopherd. | |
| git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri… | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| README | |
| LICENSE | |
| --- | |
| commit bbda3db127acc7e916bdd1668edb00ca7235ad02 | |
| parent 4481c2cbcf4bb258d8f06785528c0387386064ca | |
| Author: Christoph Lohmann <[email protected]> | |
| Date: Sat, 30 Jan 2021 18:28:55 +0100 | |
| Add the story of xsendfile to the source. | |
| Diffstat: | |
| M ind.c | 21 ++++++++++++++++++++- | |
| 1 file changed, 20 insertions(+), 1 deletion(-) | |
| --- | |
| diff --git a/ind.c b/ind.c | |
| @@ -116,9 +116,27 @@ xsendfile(int fd, int sock) | |
| USED(optval); | |
| - if (fstat(fd, &st) >= 0) | |
| + /* | |
| + * The story of xsendfile. | |
| + * | |
| + * Once upon a time, here you saw a big #ifdef switch source of | |
| + * many ways how to send files with special functions on | |
| + * different operating systems. All of this was removed, because | |
| + * operating systems and kernels got better over time, | |
| + * simplifying what you need and reducing corner cases. | |
| + * | |
| + * For example Linux sendfile(2) sounds nice and faster, but | |
| + * the function is different on every OS and slower to the now | |
| + * used approach of read(2) and write(2). | |
| + * | |
| + * If you ever consider changing this to some "faster" approach, | |
| + * consider benchmarks on all platforms. | |
| + */ | |
| + | |
| + if (fstat(fd, &st) >= 0) { | |
| if ((bufsiz = st.st_blksize) < BUFSIZ) | |
| bufsiz = BUFSIZ; | |
| + } | |
| sendb = xmalloc(bufsiz); | |
| while ((len = read(fd, sendb, bufsiz)) > 0) { | |
| @@ -133,6 +151,7 @@ xsendfile(int fd, int sock) | |
| } | |
| } | |
| free(sendb); | |
| + | |
| return 0; | |
| } | |