Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


send(2) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |VERSIONS |STANDARDS |HISTORY |NOTES |BUGS |EXAMPLES |SEE ALSO |COLOPHON

send(2)                    System Calls Manualsend(2)

NAME        top

       send, sendto, sendmsg - send a message on a socket

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#include <sys/socket.h>ssize_t send(size_t size;intsockfd, const voidbuf[size], size_tsize, intflags);ssize_t sendto(size_t size;intsockfd, const voidbuf[size], size_tsize, intflags,const struct sockaddr *dest_addr, socklen_taddrlen);ssize_t sendmsg(intsockfd, const struct msghdr *msg, intflags);

DESCRIPTION        top

       The system callssend(),sendto(), andsendmsg() are used to       transmit a message to another socket.       Thesend() call may be used only when the socket is in aconnected       state (so that the intended recipient is known).  The only       difference betweensend() andwrite(2) is the presence offlags.       With a zeroflags argument,send() is equivalent towrite(2).       Also, the following call           send(sockfd, buf, size, flags);       is equivalent to           sendto(sockfd, buf, size, flags, NULL, 0);       The argumentsockfd is the file descriptor of the sending socket.       Ifsendto() is used on a connection-mode (SOCK_STREAM,SOCK_SEQPACKET) socket, the argumentsdest_addr andaddrlen are       ignored (and the errorEISCONNmay be returned when they are not       NULL and 0), and the errorENOTCONNis returned when the socket       was not actually connected.  Otherwise, the address of the target       is given bydest_addr withaddrlen specifying its size.  Forsendmsg(), the address of the target is given bymsg.msg_name,       withmsg.msg_namelen specifying its size.       Forsend() andsendto(), the message is found inbuf and has sizesize.  Forsendmsg(), the message is pointed to by the elements of       the arraymsg.msg_iov.  Thesendmsg() call also allows sending       ancillary data (also known as control information).       If the message is too long to pass atomically through the       underlying protocol, the errorEMSGSIZEis returned, and the       message is not transmitted.       No indication of failure to deliver is implicit in asend().       Locally detected errors are indicated by a return value of -1.       When the message does not fit into the send buffer of the socket,send() normally blocks, unless the socket has been placed in       nonblocking I/O mode.  In nonblocking mode it would fail with the       errorEAGAINorEWOULDBLOCKin this case.  Theselect(2) call may       be used to determine when it is possible to send more data.The flags argument       Theflags argument is the bitwise OR of zero or more of the       following flags.MSG_CONFIRM(since Linux 2.3.15)              Tell the link layer that forward progress happened: you got              a successful reply from the other side.  If the link layer              doesn't get this it will regularly reprobe the neighbor              (e.g., via a unicast ARP).  Valid only onSOCK_DGRAMandSOCK_RAWsockets and currently implemented only for IPv4              and IPv6.  Seearp(7) for details.MSG_DONTROUTE              Don't use a gateway to send out the packet, send to hosts              only on directly connected networks.  This is usually used              only by diagnostic or routing programs.  This is defined              only for protocol families that route; packet sockets              don't.MSG_DONTWAIT(since Linux 2.2)              Enables nonblocking operation; if the operation would              block,EAGAINorEWOULDBLOCKis returned.  This provides              similar behavior to setting theO_NONBLOCKflag (via thefcntl(2)F_SETFLoperation), but differs in thatMSG_DONTWAITis a per-call option, whereasO_NONBLOCKis a              setting on the open file description (seeopen(2)), which              will affect all threads in the calling process as well as              other processes that hold file descriptors referring to the              same open file description.MSG_EOR(since Linux 2.2)              Terminates a record (when this notion is supported, as for              sockets of typeSOCK_SEQPACKET).MSG_MORE(since Linux 2.4.4)              The caller has more data to send.  This flag is used with              TCP sockets to obtain the same effect as theTCP_CORK              socket option (seetcp(7)), with the difference that this              flag can be set on a per-call basis.              Since Linux 2.6, this flag is also supported for UDP              sockets, and informs the kernel to package all of the data              sent in calls with this flag set into a single datagram              which is transmitted only when a call is performed that              does not specify this flag.  (See also theUDP_CORKsocket              option described inudp(7).)MSG_NOSIGNAL(since Linux 2.2)              Don't generate aSIGPIPEsignal if the peer on a stream-              oriented socket has closed the connection.  TheEPIPEerror              is still returned.  This provides similar behavior to usingsigaction(2) to ignoreSIGPIPE, but, whereasMSG_NOSIGNAL              is a per-call feature, ignoringSIGPIPEsets a process              attribute that affects all threads in the process.MSG_OOB              Sendsout-of-band data on sockets that support this notion              (e.g., of typeSOCK_STREAM); the underlying protocol must              also supportout-of-band data.MSG_FASTOPEN(since Linux 3.7)              Attempts TCP Fast Open (RFC7413) and sends data in the SYN              like a combination ofconnect(2) andwrite(2), by              performing an implicitconnect(2) operation.  It blocks              until the data is buffered and the handshake has completed.              For a non-blocking socket, it returns the number of bytes              buffered and sent in the SYN packet.  If the cookie is not              available locally, it returnsEINPROGRESS, and sends a SYN              with a Fast Open cookie request automatically.  The caller              needs to write the data again when the socket is connected.              On errors, it sets the sameerrno asconnect(2) if the              handshake fails.  This flag requires enabling TCP Fast Open              client support on sysctlnet.ipv4.tcp_fastopen.              Refer toTCP_FASTOPEN_CONNECTsocket option intcp(7) for              an alternative approach.sendmsg()       The definition of themsghdr structure employed bysendmsg() is as       follows:           struct msghdr {               void         *msg_name;       /* Optional address */               socklen_t     msg_namelen;    /* Size of address */               struct iovec *msg_iov;        /* Scatter/gather array */               size_t        msg_iovlen;     /* # elements in msg_iov */               void         *msg_control;    /* Ancillary data, see below */               size_t        msg_controllen; /* Ancillary data buffer size */               int           msg_flags;      /* Flags (unused) */           };       Themsg_name field is used on an unconnected socket to specify the       target address for a datagram.  It points to a buffer containing       the address; themsg_namelen field should be set to the size of       the address.  For a connected socket, these fields should be       specified as NULL and 0, respectively.       Themsg_iov andmsg_iovlen fields specify scatter-gather       locations, as forwritev(2).       You may send control information (ancillary data) using themsg_control andmsg_controllen members.  The maximum control       buffer size the kernel can process is limited per socket by the       value in/proc/sys/net/core/optmem_max; seesocket(7).  For       further information on the use of ancillary data in various socket       domains, seeunix(7) andip(7).       Themsg_flags field is ignored.

RETURN VALUE        top

       On success, these calls return the number of bytes sent.  On       error, -1 is returned, anderrno is set to indicate the error.

ERRORS        top

       These are some standard errors generated by the socket layer.       Additional errors may be generated and returned from the       underlying protocol modules; see their respective manual pages.EACCES(For UNIX domain sockets, which are identified by pathname)              Write permission is denied on the destination socket file,              or search permission is denied for one of the directories              the path prefix.  (Seepath_resolution(7).)              (For UDP sockets) An attempt was made to send to a              network/broadcast address as though it was a unicast              address.EAGAINorEWOULDBLOCK              The socket is marked nonblocking and the requested              operation would block.  POSIX.1-2001 allows either error to              be returned for this case, and does not require these              constants to have the same value, so a portable application              should check for both possibilities.EAGAIN(Internet domain datagram sockets) The socket referred to              bysockfd had not previously been bound to an address and,              upon attempting to bind it to an ephemeral port, it was              determined that all port numbers in the ephemeral port              range are currently in use.  See the discussion of/proc/sys/net/ipv4/ip_local_port_range inip(7).EALREADY              Another Fast Open is in progress.EBADFsockfd is not a valid open file descriptor.ECONNRESET              Connection reset by peer.EDESTADDRREQ              The socket is not connection-mode, and no peer address is              set.EFAULTAn invalid user space address was specified for an              argument.EINTRA signal occurred before any data was transmitted; seesignal(7).EINVALInvalid argument passed.EISCONN              The connection-mode socket was connected already but a              recipient was specified.  (Now either this error is              returned, or the recipient specification is ignored.)EMSGSIZE              The socket type requires that message be sent atomically,              and the size of the message to be sent made this              impossible.ENOBUFS              The output queue for a network interface was full.  This              generally indicates that the interface has stopped sending,              but may be caused by transient congestion.  (Normally, this              does not occur in Linux.  Packets are just silently dropped              when a device queue overflows.)ENOMEMNo memory available.ENOTCONN              The socket is not connected, and no target has been given.ENOTSOCK              The file descriptorsockfd does not refer to a socket.EOPNOTSUPP              Some bit in theflags argument is inappropriate for the              socket type.EPIPEThe local end has been shut down on a connection oriented              socket.  In this case, the process will also receive aSIGPIPEunlessMSG_NOSIGNALis set.

VERSIONS        top

       According to POSIX.1-2001, themsg_controllen field of themsghdr       structure should be typed assocklen_t, and themsg_iovlen field       should be typed asint, but glibc currently types both assize_t.

STANDARDS        top

       POSIX.1-2008.MSG_CONFIRMis a Linux extension.

HISTORY        top

       4.4BSD, SVr4, POSIX.1-2001.  (first appeared in 4.2BSD).       POSIX.1-2001 describes only theMSG_OOBandMSG_EORflags.       POSIX.1-2008 adds a specification ofMSG_NOSIGNAL.

NOTES        top

       Seesendmmsg(2) for information about a Linux-specific system call       that can be used to transmit multiple datagrams in a single call.

BUGS        top

       Linux may returnEPIPEinstead ofENOTCONN.

EXAMPLES        top

       An example of the use ofsendto() is shown ingetaddrinfo(3).

SEE ALSO        top

fcntl(2),getsockopt(2),recv(2),select(2),sendfile(2),sendmmsg(2),shutdown(2),socket(2),write(2),cmsg(3),ip(7),ipv6(7),socket(7),tcp(7),udp(7),unix(7)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-06-28send(2)

Pages that refer to this page:getrlimit(2)io_uring_enter2(2)io_uring_enter(2)recvmmsg(2)select(2)select_tut(2)sendmmsg(2)socket(2)socketcall(2)splice(2)syscalls(2)audit_request_features(3)cmsg(3)getaddrinfo(3)getifaddrs(3)if_nameindex(3)io_uring_prep_send(3)io_uring_prep_send_bundle(3)io_uring_prep_sendmsg(3)io_uring_prep_sendmsg_zc(3)io_uring_prep_send_set_addr(3)io_uring_prep_sendto(3)io_uring_prep_send_zc(3)io_uring_prep_send_zc_fixed(3)rtime(3)size_t(3type)sockaddr(3type)sockatmark(3)arp(7)bpf-helpers(7)ddp(7)ip(7)ipv6(7)landlock(7)mctp(7)netlink(7)packet(7)raw(7)sctp(7)signal(7)signal-safety(7)socket(7)tcp(7)udp(7)unix(7)vsock(7)trafgen(8)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp