diff options
author | Igor Sysoev <igor@sysoev.ru> | 2002-08-06 16:39:45 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2002-08-06 16:39:45 +0000 |
commit | 6de5c2cb63f8aee4bcbec3c363a72fd8e4a4e64d (patch) | |
tree | 0e4da305f8101799b6c6aa3002cecf539c2578c0 /src/os/unix/ngx_sendfile.c | |
download | nginx-6de5c2cb63f8aee4bcbec3c363a72fd8e4a4e64d.tar.gz nginx-6de5c2cb63f8aee4bcbec3c363a72fd8e4a4e64d.zip |
nginx-0.0.1-2002-08-06-20:39:45 import
The first code that uses "ngx_" prefix, the previous one used "gx_" prefix.
At that point the code is not yet usable. The first draft ideas are dated
back to 23.10.2001.
Diffstat (limited to 'src/os/unix/ngx_sendfile.c')
-rw-r--r-- | src/os/unix/ngx_sendfile.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/os/unix/ngx_sendfile.c b/src/os/unix/ngx_sendfile.c new file mode 100644 index 000000000..2bc157361 --- /dev/null +++ b/src/os/unix/ngx_sendfile.c @@ -0,0 +1,65 @@ + +#include <ngx_config.h> +#include <ngx_types.h> +#include <ngx_errno.h> +#include <ngx_log.h> +#include <ngx_sendv.h> +#include <ngx_sendfile.h> + +/* + TODO: + FreeBSD: + check sent if errno == EINTR then should return right sent. +*/ + +/* + returns + 0 done + -1 error +*/ + +#if (HAVE_FREEBSD_SENDFILE) + +int ngx_sendfile(ngx_socket_t s, + ngx_iovec_t *headers, int hdr_cnt, + ngx_file_t fd, off_t offset, size_t nbytes, + ngx_iovec_t *trailers, int trl_cnt, + off_t *sent, + ngx_log_t *log) +{ + int rc, i; + ngx_err_t err; + struct sf_hdtr hdtr; + + hdtr.headers = headers; + hdtr.hdr_cnt = hdr_cnt; + hdtr.trailers = trailers; + hdtr.trl_cnt = trl_cnt; + +#if (HAVE_FREEBSD_SENDFILE_NBYTES_BUG) + for (i = 0; i < hdr_cnt; i++) + nbytes += headers[i].iov_len; +#endif + + rc = sendfile(fd, s, offset, nbytes, &hdtr, sent, 0); + + if (rc == -1) { + err = ngx_socket_errno; + if (err != NGX_EAGAIN && err != NGX_EINTR) { + ngx_log_error(NGX_LOG_ERR, log, err, + "ngx_sendfile: sendfile failed"); + return -1; + + } else { + ngx_log_error(NGX_LOG_INFO, log, err, + "ngx_sendfile: sendfile sent only %qd bytes", *sent); + } + } + + ngx_log_debug(log, "ngx_sendfile: %d, @%qd %d:%qd" _ + rc _ offset _ nbytes _ *sent); + + return 0; +} + +#endif |