248 lines
6.2 KiB
Groff
248 lines
6.2 KiB
Groff
.\" Copyright (c) 2003, David G. Lawrence
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice unmodified, this list of conditions, and the following
|
|
.\" disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\"
|
|
.Dd March 31, 2006
|
|
.Dt SENDFILE 2
|
|
.Os "Mac OS X"
|
|
.Sh NAME
|
|
.Nm sendfile
|
|
.Nd send a file to a socket
|
|
.Sh SYNOPSIS
|
|
.In sys/types.h
|
|
.In sys/socket.h
|
|
.In sys/uio.h
|
|
.Ft int
|
|
.Fo sendfile
|
|
.Fa "int fd" "int s" "off_t offset" "off_t *len"
|
|
.Fa "struct sf_hdtr *hdtr" "int flags"
|
|
.Fc
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Fn sendfile
|
|
system call
|
|
sends a regular file specified by descriptor
|
|
.Fa fd
|
|
out a stream socket specified by descriptor
|
|
.Fa s .
|
|
.Pp
|
|
The
|
|
.Fa offset
|
|
argument specifies where to begin in the file.
|
|
Should
|
|
.Fa offset
|
|
fall beyond the end of file, the system will return
|
|
success and report 0 bytes sent as described below.
|
|
.Pp
|
|
The
|
|
.Fa len
|
|
argument is a value-result parameter, that specifies how many bytes
|
|
of the file should be sent and/or how many bytes have been sent.
|
|
Initially the value pointed to by the
|
|
.Fa len
|
|
argument specifies how many bytes should be sent with 0 having the special
|
|
meaning to send until the end of file has been reached.
|
|
On return the value pointed to by the
|
|
.Fa len
|
|
argument indicates how many bytes have been sent, except when a header or
|
|
trailer is specified as shown below.
|
|
The
|
|
.Fa len
|
|
pointer may not be NULL.
|
|
.Pp
|
|
An optional header and/or trailer can be sent before and after the file data by
|
|
specifying a pointer to a
|
|
.Vt "struct sf_hdtr" ,
|
|
which has the following structure:
|
|
.Pp
|
|
.Bd -literal -offset indent -compact
|
|
struct sf_hdtr {
|
|
struct iovec *headers; /* pointer to header iovecs */
|
|
int hdr_cnt; /* number of header iovecs */
|
|
struct iovec *trailers; /* pointer to trailer iovecs */
|
|
int trl_cnt; /* number of trailer iovecs */
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The
|
|
.Fa headers
|
|
and
|
|
.Fa trailers
|
|
pointers, if
|
|
.Pf non- Dv NULL ,
|
|
point to arrays of
|
|
.Vt "struct iovec"
|
|
structures.
|
|
See the
|
|
.Fn writev
|
|
system call for information on the iovec structure.
|
|
The number of iovecs in these
|
|
arrays is specified by
|
|
.Fa hdr_cnt
|
|
and
|
|
.Fa trl_cnt .
|
|
.Pp
|
|
When a header or trailer is specified, the value of
|
|
.Fa len
|
|
argument indicates the maximum number of bytes in the header and/or file to be sent.
|
|
It does not control the trailer; if a trailer exists, all of it will be sent.
|
|
If the value of
|
|
.Fa len
|
|
argument is 0, all of the header and/or file will be sent before the entire trailer is sent.
|
|
On return, the
|
|
.Fa len
|
|
argument specifies the total number of bytes sent.
|
|
.Pp
|
|
The
|
|
.Fa flags
|
|
parameter is reserved for future expansion and must be set to 0. Any other value
|
|
will cause
|
|
.Fn sendfile
|
|
to return
|
|
.Er EINVAL .
|
|
.Pp
|
|
When using a socket marked for non-blocking I/O,
|
|
.Fn sendfile
|
|
may send fewer bytes than requested.
|
|
In this case, the number of bytes successfully
|
|
sent is returned in the via the
|
|
.Fa len
|
|
parameters and the error
|
|
.Er EAGAIN
|
|
is returned.
|
|
.Pp
|
|
When a signal causes
|
|
.Fn sendfile
|
|
to return the error
|
|
.Er EINTR ,
|
|
the
|
|
.Fa len
|
|
argument may return 0 without necessarily meaning the end of file has been reached
|
|
as the signal may have been caught before any data was sent.
|
|
.Sh IMPLEMENTATION NOTES
|
|
The
|
|
Mac OS X
|
|
implementation of
|
|
.Fn sendfile
|
|
uses 64 bits types for size and offset parameters so there is no need for
|
|
a 64 bits version
|
|
.Fn sendfile64
|
|
as found on some other operating systems.
|
|
.Sh RETURN VALUES
|
|
.Rv -std sendfile
|
|
.Pp
|
|
The number of bytes sent is returned via the parameter
|
|
.Fa len .
|
|
A value of 0 means the end of the file specified by descriptor
|
|
.Fa fd
|
|
has been reached or that the value passed in
|
|
.Fa offset
|
|
falls beyond the end of file.
|
|
.Sh ERRORS
|
|
.Bl -tag -width Er
|
|
.It Bq Er EAGAIN
|
|
The socket is marked for non-blocking I/O and not all data was sent due to
|
|
the socket buffer being full.
|
|
If specified, the number of bytes successfully sent will be returned in
|
|
.Fa *len .
|
|
.It Bq Er EBADF
|
|
The
|
|
.Fa fd
|
|
argument
|
|
is not a valid file descriptor.
|
|
.It Bq Er ENOTSUP
|
|
The
|
|
.Fa fd
|
|
argument
|
|
does not refer to a regular file.
|
|
.It Bq Er EBADF
|
|
The
|
|
.Fa s
|
|
argument
|
|
is not a valid socket descriptor.
|
|
.It Bq Er ENOTSOCK
|
|
The
|
|
.Fa s
|
|
argument
|
|
does not refer stream oriented socket.
|
|
.It Bq Er EFAULT
|
|
An invalid address was specified for an argument.
|
|
.It Bq Er EINTR
|
|
A signal interrupted
|
|
.Fn sendfile
|
|
before it could be completed.
|
|
If specified, the number
|
|
of bytes successfully sent will be returned in
|
|
.Fa *len .
|
|
.It Bq Er EINVAL
|
|
The
|
|
.Fa offset
|
|
argument
|
|
is negative.
|
|
.It Bq Er EINVAL
|
|
The
|
|
.Fa len
|
|
argument
|
|
is NULL.
|
|
.It Bq Er EINVAL
|
|
The
|
|
.Fa flags
|
|
argument
|
|
is not set to 0.
|
|
.It Bq Er EIO
|
|
An error occurred while reading from
|
|
.Fa fd .
|
|
.It Bq Er ENOTCONN
|
|
The
|
|
.Fa s
|
|
argument
|
|
points to an unconnected socket.
|
|
.It Bq Er ENOTSOCK
|
|
The
|
|
.Fa s
|
|
argument
|
|
is not a socket.
|
|
.It Bq Er EOPNOTSUPP
|
|
The file system for descriptor
|
|
.Fa fd
|
|
does not support
|
|
.Fn sendfile .
|
|
.It Bq Er EPIPE
|
|
The socket peer has closed the connection.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr open 2 ,
|
|
.Xr send 2 ,
|
|
.Xr socket 2 ,
|
|
.Xr writev 2
|
|
.Sh HISTORY
|
|
The
|
|
.Fn sendfile
|
|
system call
|
|
first appeared in
|
|
Darwin 9.0 (Mac OS X version 10.5) .
|
|
.Sh AUTHORS
|
|
This manual page is based on the FreeBSD version written by
|
|
.An David G. Lawrence Aq dg@dglawrence.com
|