From 758fab8895755b22ce02f0a6026d4d286c8a9c5a Mon Sep 17 00:00:00 2001 From: Lukas Larsson Date: Sun, 27 Nov 2011 17:30:06 +0100 Subject: Expand sendfile documentation --- lib/kernel/doc/src/file.xml | 66 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 9 deletions(-) (limited to 'lib/kernel/doc') diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml index 78bf0aff45..7fcc354176 100644 --- a/lib/kernel/doc/src/file.xml +++ b/lib/kernel/doc/src/file.xml @@ -149,6 +149,9 @@ + + + @@ -1574,25 +1577,70 @@ - + send a file to a socket -

Sends Bytes in from the file - referenced by IoDevice beginning at Offset to - Socket. +

Sends the file Filename to Socket. Returns {ok, BytesSent} if successful, otherwise {error, Reason}.

-

Available on Linux, FreeBSD, DragonflyBSD, Solaris, Darwin and Windows

- + send a file to a socket -

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.

-- cgit v1.2.3