The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

sendfile (2)
  • >> sendfile (2) ( FreeBSD man: Системные вызовы )
  • sendfile (2) ( Русские man: Системные вызовы )
  • sendfile (2) ( Linux man: Системные вызовы )
  • sendfile (3) ( Solaris man: Библиотечные вызовы )
  • Ключ sendfile обнаружен в базе ключевых слов.

  • BSD mandoc
     

    NAME

    
    
    sendfile
    
     - send a file to a socket
    
     
    

    LIBRARY

    Lb libc
    
     
    

    SYNOPSIS

       #include <sys/types.h>
       #include <sys/socket.h>
       #include <sys/uio.h>
    int Fo sendfile Fa int fd int s off_t offset size_t nbytes Fa struct sf_hdtr *hdtr off_t *sbytes int flags Fc  

    DESCRIPTION

    The sendfile ();
    system call sends a regular file specified by descriptor Fa fd out a stream socket specified by descriptor Fa s .

    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. The Fa nbytes argument specifies how many bytes of the file should be sent, with 0 having the special meaning of send until the end of file has been reached.

    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:

    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 */
    };
    

    The Fa headers and Fa trailers pointers, if non- NULL point to arrays of Vt struct iovec structures. See the 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 .

    If non- NULL the system will write the total number of bytes sent on the socket to the variable pointed to by Fa sbytes .

    The Fa flags argument has one possible value: SF_NODISKIO This flag causes any sendfile ();
    call which would block on disk I/O to instead return Er EBUSY . Busy servers may benefit by transferring requests that would block to a separate I/O worker thread.

    When using a socket marked for non-blocking I/O, sendfile ();
    may send fewer bytes than requested. In this case, the number of bytes successfully written is returned in Fa *sbytes (if specified), and the error Er EAGAIN is returned.  

    IMPLEMENTATION NOTES

    The Fx implementation of sendfile ();
    is "zero-copy", meaning that it has been optimized so that copying of the file data is avoided.  

    TUNING

    On some architectures, this system call internally uses a special sendfile ();
    buffer (Vt struct sf_buf ) to handle sending file data to the client. If the sending socket is blocking, and there are not enough sendfile ();
    buffers available, sendfile ();
    will block and report a state of ``sfbufa '' If the sending socket is non-blocking and there are not enough sendfile ();
    buffers available, the call will block and wait for the necessary buffers to become available before finishing the call.

    The number of Vt sf_buf Ns 's allocated should be proportional to the number of nmbclusters used to send data to a client via sendfile (.);
    Tune accordingly to avoid blocking! Busy installations that make extensive use of sendfile ();
    may want to increase these values to be inline with their kern.ipc.nmbclusters (see tuning(7) for details).

    The number of sendfile ();
    buffers available is determined at boot time by either the kern.ipc.nsfbufs loader.conf5 variable or the NSFBUFS kernel configuration tunable. The number of sendfile ();
    buffers scales with kern.maxusers The kern.ipc.nsfbufsused and kern.ipc.nsfbufspeak read-only sysctl(8) variables show current and peak sendfile ();
    buffers usage respectively. These values may also be viewed through netstat -m

    If a value of zero is reported for kern.ipc.nsfbufs your architecture does not need to use sendfile ();
    buffers because their task can be efficiently performed by the generic virtual memory structures.  

    RETURN VALUES

    Rv -std sendfile  

    ERRORS

    Bq Er EAGAIN
    The socket is marked for non-blocking I/O and not all data was sent due to the socket buffer being filled. If specified, the number of bytes successfully sent will be returned in Fa *sbytes .
    Bq Er EBADF
    The Fa fd argument is not a valid file descriptor.
    Bq Er EBADF
    The Fa s argument is not a valid socket descriptor.
    Bq Er EBUSY
    Completing the entire transfer would have required disk I/O, so it was aborted. Partial data may have been sent. (This error can only occur when SF_NODISKIO is specified.)
    Bq Er EFAULT
    An invalid address was specified for an argument.
    Bq Er EINTR
    A signal interrupted sendfile ();
    before it could be completed. If specified, the number of bytes successfully sent will be returned in Fa *sbytes .
    Bq Er EINVAL
    The Fa fd argument is not a regular file.
    Bq Er EINVAL
    The Fa s argument is not a SOCK_STREAM type socket.
    Bq Er EINVAL
    The Fa offset argument is negative.
    Bq Er EIO
    An error occurred while reading from Fa fd .
    Bq Er ENOTCONN
    The Fa s argument points to an unconnected socket.
    Bq Er ENOTSOCK
    The Fa s argument is not a socket.
    Bq Er EOPNOTSUPP
    The file system for descriptor Fa fd does not support sendfile (.);
    Bq Er EPIPE
    The socket peer has closed the connection.

     

    SEE ALSO

    netstat(1), open(2), send(2), socket(2), writev(2), tuning(7)
    K. Elmeleegy A. Chanda A. L. Cox W. Zwaenepoel A Portable Kernel Abstraction for Low-Overhead Ephemeral Mapping Management The Proceedings of the 2005 USENIX Annual Technical Conference pp 223-236 2005
     

    HISTORY

    The sendfile ();
    system call first appeared in Fx 3.0 . This manual page first appeared in Fx 3.1 .  

    AUTHORS

    The sendfile ();
    system call and this manual page were written by An David G. Lawrence Aq dg@dglawrence.com .


     

    Index

    NAME
    LIBRARY
    SYNOPSIS
    DESCRIPTION
    IMPLEMENTATION NOTES
    TUNING
    RETURN VALUES
    ERRORS
    SEE ALSO
    HISTORY
    AUTHORS


    Поиск по тексту MAN-ов: 




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру