1.\" Copyright (c) 1983, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the University nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" From: @(#)send.2 8.2 (Berkeley) 2/21/94 29.\" 30.Dd April 27, 2020 31.Dt SEND 2 32.Os 33.Sh NAME 34.Nm send , 35.Nm sendto , 36.Nm sendmsg , 37.Nm sendmmsg 38.Nd send message(s) from a socket 39.Sh LIBRARY 40.Lb libc 41.Sh SYNOPSIS 42.In sys/socket.h 43.Ft ssize_t 44.Fn send "int s" "const void *msg" "size_t len" "int flags" 45.Ft ssize_t 46.Fn sendto "int s" "const void *msg" "size_t len" "int flags" "const struct sockaddr *to" "socklen_t tolen" 47.Ft ssize_t 48.Fn sendmsg "int s" "const struct msghdr *msg" "int flags" 49.Ft ssize_t 50.Fn sendmmsg "int s" "struct mmsghdr * restrict msgvec" "size_t vlen" "int flags" 51.Sh DESCRIPTION 52The 53.Fn send 54and 55.Fn sendmmsg 56functions, 57and 58.Fn sendto 59and 60.Fn sendmsg 61system calls 62are used to transmit one or more messages (with the 63.Fn sendmmsg 64call) to 65another socket. 66The 67.Fn send 68function 69may be used only when the socket is in a 70.Em connected 71state. 72The functions 73.Fn sendto , 74.Fn sendmsg 75and 76.Fn sendmmsg 77may be used at any time if the socket is connectionless-mode. 78If the socket is connection-mode, the protocol 79must support implied connect (currently 80.Xr tcp 4 81is the only protocol with support) or the socket must be in a 82connected state before use. 83.Pp 84The address of the target is given by 85.Fa to 86with 87.Fa tolen 88specifying its size, or the equivalent 89.Fa msg_name 90and 91.Fa msg_namelen 92in 93.Fa struct msghdr . 94If the socket is in a connected state, the target address passed to 95.Fn sendto , 96.Fn sendmsg 97or 98.Fn sendmmsg 99is ignored. 100The length of the message is given by 101.Fa len . 102If the message is too long to pass atomically through the 103underlying protocol, the error 104.Er EMSGSIZE 105is returned, and 106the message is not transmitted. 107.Pp 108The 109.Fn sendmmsg 110function sends multiple messages at a call. 111They are given by the 112.Fa msgvec 113vector along with 114.Fa vlen 115specifying the vector size. 116The number of octets sent per each message is placed in the 117.Fa msg_len 118field of each processed element of the vector after transmission. 119.Pp 120No indication of failure to deliver is implicit in a 121.Fn send . 122Locally detected errors are indicated by a return value of -1. 123.Pp 124If no messages space is available at the socket to hold 125the message to be transmitted, then 126.Fn send 127normally blocks, unless the socket has been placed in 128non-blocking I/O mode. 129The 130.Xr select 2 131system call may be used to determine when it is possible to 132send more data. 133.Pp 134The 135.Fa flags 136argument may include one or more of the following: 137.Bd -literal 138#define MSG_OOB 0x00001 /* process out-of-band data */ 139#define MSG_DONTROUTE 0x00004 /* bypass routing, use direct interface */ 140#define MSG_EOR 0x00008 /* data completes record */ 141#define MSG_DONTWAIT 0x00080 /* do not block */ 142#define MSG_EOF 0x00100 /* data completes transaction */ 143#define MSG_NOSIGNAL 0x20000 /* do not generate SIGPIPE on EOF */ 144.Ed 145.Pp 146The flag 147.Dv MSG_OOB 148is used to send 149.Dq out-of-band 150data on sockets that support this notion (e.g.\& 151.Dv SOCK_STREAM ) ; 152the underlying protocol must also support 153.Dq out-of-band 154data. 155.Dv MSG_EOR 156is used to indicate a record mark for protocols which support the 157concept. 158The 159.Dv MSG_DONTWAIT 160flag request the call to return when it would block otherwise. 161.Dv MSG_EOF 162requests that the sender side of a socket be shut down, and that an 163appropriate indication be sent at the end of the specified data; 164this flag is only implemented for 165.Dv SOCK_STREAM 166sockets in the 167.Dv PF_INET 168protocol family. 169.Dv MSG_DONTROUTE 170is usually used only by diagnostic or routing programs. 171.Dv MSG_NOSIGNAL 172is used to prevent 173.Dv SIGPIPE 174generation when writing a socket that 175may be closed. 176.Pp 177See 178.Xr recv 2 179for a description of the 180.Fa msghdr 181structure and the 182.Fa mmsghdr 183structure. 184.Sh RETURN VALUES 185The 186.Fn send , 187.Fn sendto 188and 189.Fn sendmsg 190calls 191return the number of octets sent. 192The 193.Fn sendmmsg 194call returns the number of messages sent. 195If an error occurred a value of -1 is returned. 196.Sh ERRORS 197The 198.Fn send 199and 200.Fn sendmmsg 201functions and 202.Fn sendto 203and 204.Fn sendmsg 205system calls 206fail if: 207.Bl -tag -width Er 208.It Bq Er EBADF 209An invalid descriptor was specified. 210.It Bq Er EACCES 211The destination address is a broadcast address, and 212.Dv SO_BROADCAST 213has not been set on the socket. 214.It Bq Er ENOTCONN 215The socket is connection-mode but is not connected. 216.It Bq Er ENOTSOCK 217The argument 218.Fa s 219is not a socket. 220.It Bq Er EFAULT 221An invalid user space address was specified for an argument. 222.It Bq Er EMSGSIZE 223The socket requires that message be sent atomically, 224and the size of the message to be sent made this impossible. 225.It Bq Er EAGAIN 226The socket is marked non-blocking, or 227.Dv MSG_DONTWAIT 228is specified, and the requested operation would block. 229.It Bq Er ENOBUFS 230The system was unable to allocate an internal buffer. 231The operation may succeed when buffers become available. 232.It Bq Er ENOBUFS 233The output queue for a network interface was full. 234This generally indicates that the interface has stopped sending, 235but may be caused by transient congestion. 236.It Bq Er EHOSTUNREACH 237The remote host was unreachable. 238.It Bq Er EISCONN 239A destination address was specified and the socket is already connected. 240.It Bq Er ECONNREFUSED 241The socket received an ICMP destination unreachable message 242from the last message sent. 243This typically means that the 244receiver is not listening on the remote port. 245.It Bq Er EHOSTDOWN 246The remote host was down. 247.It Bq Er ENETDOWN 248The remote network was down. 249.It Bq Er EADDRNOTAVAIL 250The process using a 251.Dv SOCK_RAW 252socket was jailed and the source 253address specified in the IP header did not match the IP 254address bound to the prison. 255.It Bq Er EPIPE 256The socket is unable to send anymore data 257.Dv ( SBS_CANTSENDMORE 258has been set on the socket). 259This typically means that the socket 260is not connected. 261.El 262.Sh SEE ALSO 263.Xr connect 2 , 264.Xr fcntl 2 , 265.Xr getsockopt 2 , 266.Xr recv 2 , 267.Xr select 2 , 268.Xr socket 2 , 269.Xr write 2 , 270.Xr CMSG_DATA 3 271.Sh HISTORY 272The 273.Fn send 274function appeared in 275.Bx 4.2 . 276The 277.Fn sendmmsg 278function appeared in 279.Fx 11.0 . 280.Sh BUGS 281Because 282.Fn sendmsg 283does not necessarily block until the data has been transferred, it 284is possible to transfer an open file descriptor across an 285.Dv AF_UNIX 286domain socket 287(see 288.Xr recv 2 ) , 289then 290.Fn close 291it before it has actually been sent, the result being that the receiver 292gets a closed file descriptor. 293It is left to the application to 294implement an acknowledgment mechanism to prevent this from happening. 295