- Sends the file Filename to Socket.
+
Sends Bytes from the file
+ referenced by RawFile beginning at Offset to
+ Socket.
Returns {ok, BytesSent} if successful,
- otherwise {error, Reason}.
- Available on Linux, FreeBSD, DragonflyBSD, Solaris, Darwin and Windows
+ otherwise {error, Reason}. If Bytes is set to
+ 0 all data after the given Offset is sent.
+ The file used must be opened using the raw flag, and the process
+ calling sendfile must be the controlling process of the socket.
+ See gen_tcp:controlling_process/2
+ If the OS used does not support sendfile, an Erlang fallback
+ using file:read and gen_tcp:send is used.
+ The option list can contain the following options:
+
+ headers
+ - A list containing data which is to be sent before
+ the file is sent. If headers is used, Bytes specifies
+ the total bytes in the header and/or file to be sent. If
+ Bytes is set to 0, the all headers, the file and
+ possible trailers will be sent.
+ trailers
+ - A list containing data which is to be after before
+ the file is sent. All the trailers will be sent after the
+ file is sent, no matter what Bytes is set to.
+ chunk_size
+ - The chunk size used by the erlang fallback to send
+ data. If using the fallback, this should be set to a value
+ which comfortably fits in the systems memory. Default is 20 MB.
+ sf_nodiskio
+ - This flag causes any sendfile() call which would
+ block on disk I/O to instead return EBUSY. Busy servers may bene-
+ fit by transferring requests that would block to a separate I/O
+ worker thread.
+ sf_mnowait
+ - Do not wait for some kernel resource to become avail-
+ able, in particular, mbuf and sf_buf. The flag does not make the
+ sendfile() syscall truly non-blocking, since other resources are
+ still allocated in a blocking fashion.
+ sf_sync
+ - sendfile sleeps until the network stack no longer refer-
+ ences the VM pages of the file, making subsequent modifications to
+ it safe. Please note that this is not a guarantee that the data
+ has actually been sent.
+
+
+ On operating systems with thread support, it is recommended to use
+ async threads. See the command line flag
+ +A in erl(1). If it is not
+ possible to use async threads for sendfile, it is recommended to use
+ a relatively small value for the send buffer on the socket. Otherwise
+ the Erlang VM might loose some of its soft realtime guarantees.
+ Which size to use depends on the OS/hardware and the requirements
+ of the application.