sendfile man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

SENDFILE(3EXT)							SENDFILE(3EXT)

NAME
       sendfile - send files over sockets or copy files to files

SYNOPSIS
       cc [ flag... ] file... -lsendfile [ library... ]
       #include <sys/sendfile.h>

       ssize_t sendfile(int out_fd, int in_fd, off_t *off, size_t len);

DESCRIPTION
       The  sendfile()	function  copies data from in_fd to out_fd starting at
       offset off and of length len bytes. The in_fd argument should be a file
       descriptor  to  a  regular  file	 opened	 for reading. See open(2). The
       out_fd argument should be a file descriptor to a	 regular  file	opened
       for writing or to a connected AF_INET or AF_INET6 socket of SOCK_STREAM
       type. See socket(3SOCKET). The off argument is a pointer to a  variable
       holding	the  input  file  pointer position from which the data will be
       read. After sendfile() has completed, the variable will be set  to  the
       offset  of  the	byte  following the last byte that was read. The send‐
       file() function does not modify the current file pointer of in_fd,  but
       does modify the file pointer for out_fd if it is a regular file.

       The  sendfile()	function  can also be used to send buffers by pointing
       in_fd to SFV_FD_SELF.

RETURN VALUES
       Upon successful completion, sendfile()  returns	the  total  number  of
       bytes  written  to  out_fd  and also updates the offset to point to the
       byte that follows the last byte read. Otherwise,	 it  returns  -1,  and
       errno is set to indicate the error.

ERRORS
       The sendfile() function will fail if:

       EAFNOSUPPORT
		       The  implementation  does  not  support	the  specified
		       address family for socket.

       EAGAIN
		       Mandatory file or record locking is set on  either  the
		       file  descriptor or output file descriptor if it points
		       at regular files. O_NDELAY or O_NONBLOCK is   set,  and
		       there  is  a  blocking record lock. An attempt has been
		       made to write to a stream that cannot accept data  with
		       the O_NDELAY or the O_NONBLOCK flag set.

       EBADF
		       The out_fd or in_fd argument is either not a valid file
		       descriptor, out_fd is not opened for writing. or	 in_fd
		       is not opened for reading.

       EINVAL
		       The  offset  cannot  be represented by the off_t struc‐
		       ture, or the length is negative when cast to ssize_t.

       EIO
		       An I/O error occurred while accessing the file system.

       ENOTCONN
		       The socket is not connected.

       EOPNOTSUPP
		       The socket type is not supported.

       EPIPE
		       The out_fd argument is no longer connected to the  peer
		       endpoint.

       EINTR
		       A  signal  was caught during the write operation and no
		       data was transferred.

USAGE
       The sendfile() function has a transitional interface  for  64-bit  file
       offsets. See lf64(5).

EXAMPLES
       Example 1 Sending a Buffer Over a Socket

       The  following  example	demonstrates how to send the buffer buf over a
       socket. At the end, it prints the number of bytes transferred over  the
       socket  from  the buffer. It assumes that addr will be filled up appro‐
       priately, depending upon where to send the buffer.

	 int tfd;
	 off_t baddr;
	 struct sockaddr_in sin;
	 char buf[64 * 1024];
	 in_addr_t addr;
	 size_t len;

	 tfd = socket(AF_INET, SOCK_STREAM, 0);
	 if (tfd == -1) {
	     perror("socket");
	     exit(1);
	 }

	 sin.sin_family = AF_INET;
	 sin.sin_addr.s_addr = addr;	/* Fill in the	appropriate address. */
	 sin.sin_port = htons(2345);
	 if (connect(tfd, (struct sockaddr *)&sin, sizeof(sin))<0) {
	     perror("connect");
	     exit(1);
	 }

	 baddr = (off_t)buf;
	 len = sizeof(buf);
	 while (len > 0) {
	     ssize_t res;
	     res = sendfile(tfd, SFV_FD_SELF, &baddr, len);
	     if (res == -1)
		     if (errno != EINTR) {
			     perror("sendfile");
			     exit(1);
		     } else continue;
	     len -= res;
	 }

       Example 2 Transferring Files to Sockets

       The following program demonstrates a transfer of files to sockets:

	 int ffd, tfd;
	 off_t off;
	 struct sockaddr_in sin;
	 in_addr_t  addr;
	 int len;
	 struct stat stat_buf;
	 ssize_t len;

	 ffd = open("file", O_RDONLY);
	 if (ffd == -1) {
	     perror("open");
	     exit(1);
	 }

	 tfd = socket(AF_INET, SOCK_STREAM, 0);
	 if (tfd == -1) {
	     perror("socket");
	     exit(1);
	 }

	 sin.sin_family = AF_INET;
	 sin.sin_addr = addr;	 /* Fill in the	 appropriate address. */
	 sin.sin_port = htons(2345);
	 if (connect(tfd, (struct sockaddr *) &sin, sizeof(sin)) <0) {
	     perror("connect");
	     exit(1);
	 }

	 if (fstat(ffd, &stat_buf) == -1) {
	     perror("fstat");
	     exit(1);
	 }

	 len = stat_buf.st_size;
	 while (len > 0) {
	     ssize_t res;
	     res = sendfile(tfd, ffd, &off, len);
	     if (res == -1)
		     if (errno != EINTR) {
			     perror("sendfile");
			     exit(1);
		     } else continue;
	     len -= res;
	 }

ATTRIBUTES
       See attributes(5)  for descriptions of the following attributes:

       ┌────────────────────┬─────────────────┐
       │  ATTRIBUTE TYPE    │ ATTRIBUTE VALUE │
       ├────────────────────┼─────────────────┤
       │Interface Stability │ Evolving	      │
       ├────────────────────┼─────────────────┤
       │MT-Level	    │ MT-Safe	      │
       └────────────────────┴─────────────────┘

SEE ALSO
       open(2),	   libsendfile(3LIB),	 sendfilev(3EXT),     socket(3SOCKET),
       attributes(5), lf64(5)

				 May 31, 2006			SENDFILE(3EXT)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net