173 lines
4.1 KiB
Groff
173 lines
4.1 KiB
Groff
'\"macro stdmacro
|
|
.\" Copyright (c) 1983 Regents of the University of California.
|
|
.\" All rights reserved. The Berkeley software License Agreement
|
|
.\" specifies the terms and conditions for redistribution.
|
|
.\"
|
|
.\" @(#)send.2 6.3 (Berkeley) 5/14/86
|
|
.\"
|
|
.if n .pH man2.send @(#)send 30.3 of 2/1/86
|
|
.TH SEND 2
|
|
.UC 5
|
|
.SH NAME
|
|
send, sendto, sendmsg \- send a message from a socket
|
|
.Op c p a
|
|
.SH C SYNOPSIS
|
|
.B #include <sys/types.h>
|
|
.br
|
|
.B #include <sys/socket.h>
|
|
.sp .5
|
|
.br
|
|
.B "int send\|(int s, const void \(**msg, int len, int flags);"
|
|
.sp .5
|
|
.br
|
|
.B "int sendto\|(int s, const void \(**msg, int len, int flags,"
|
|
.br
|
|
.B " struct sockaddr \(**to, int tolen);"
|
|
.sp .5
|
|
.br
|
|
.B "int sendmsg\|(int s, const struct msghdr \(**msg, int flags);"
|
|
.Op
|
|
.Op f
|
|
.SH FORTRAN SYNOPSIS
|
|
.B "integer *4 function send (s, msg, len, flags)"
|
|
.br
|
|
.B "integer *4 s"
|
|
.br
|
|
.B "character * (*) msg"
|
|
.br
|
|
.B "integer *4 len, flags"
|
|
.Op
|
|
.SH DESCRIPTION
|
|
.IR Send ,
|
|
.IR sendto ,
|
|
and
|
|
.I sendmsg
|
|
are used to transmit a message to another socket.
|
|
.I Send
|
|
may be used only when the socket is in a
|
|
.I connected
|
|
state, while
|
|
.I sendto
|
|
and
|
|
.I sendmsg
|
|
may be used when the socket is unconnected.
|
|
.PP
|
|
The address of the target is given by
|
|
.I to
|
|
with
|
|
.I tolen
|
|
specifying its size.
|
|
The length of the message is given by
|
|
.IR len .
|
|
If the message is too long to pass atomically through the
|
|
underlying protocol, then the error EMSGSIZE is returned, and
|
|
the message is not transmitted.
|
|
.PP
|
|
Usually no indication of failure to deliver is implicit in a
|
|
.IR send .
|
|
Return values of \-1 indicate some locally detected errors.
|
|
Connected datagram sockets may receive error indications
|
|
from a previous
|
|
.IR send .
|
|
.PP
|
|
If no messages space is available at the socket to hold
|
|
the message to be transmitted, then
|
|
.I send
|
|
normally blocks, unless the socket has been placed in
|
|
non-blocking I/O mode.
|
|
The
|
|
.IR select (2)
|
|
call may be used to determine when it is possible to
|
|
send more data.
|
|
.PP
|
|
The
|
|
.I flags
|
|
parameter may include one or more of the following:
|
|
.PP
|
|
.nf
|
|
.\".RS
|
|
.\".ta \w'#define\ \ 'u +\w'MSG_DONTROUTE\ \ \ 'u +\w'0x\0\0\0\ \ 'u
|
|
#define MSG_OOB 0x1 /* process out-of-band data */
|
|
.br
|
|
#define MSG_DONTROUTE 0x4 /* bypass routing,
|
|
.br
|
|
use direct interface */
|
|
.\".RE
|
|
.fi
|
|
|
|
.PP
|
|
The flag MSG_OOB is used to send \*(lqout-of-band\*(rq
|
|
data on sockets that support this notion (e.g., SOCK_STREAM);
|
|
the underlying protocol must also support \*(lqout-of-band\*(rq data.
|
|
MSG_DONTROUTE is usually used only by diagnostic or routing programs.
|
|
.PP
|
|
See
|
|
.IR recv (2)
|
|
for a description of the
|
|
.I msghdr
|
|
structure.
|
|
.SH "RETURN VALUE
|
|
The call returns the number of characters sent, or \-1
|
|
if an error occurred.
|
|
.SH "ERRORS
|
|
.TP 20
|
|
[EBADF]
|
|
An invalid descriptor was specified.
|
|
.TP 20
|
|
[ENOTSOCK]
|
|
The argument \f2s\fP is not a socket.
|
|
.TP 20
|
|
[EFAULT]
|
|
An invalid user space address was specified for a parameter.
|
|
.TP 20
|
|
[EMSGSIZE]
|
|
The socket requires that message be sent atomically,
|
|
and the size of the message to be sent made this impossible.
|
|
.TP 20
|
|
[EWOULDBLOCK]
|
|
The socket is marked non-blocking and the requested operation
|
|
would block.
|
|
.TP 20
|
|
[ENOBUFS]
|
|
The system was unable to allocate an internal buffer.
|
|
The operation may succeed when buffers become available.
|
|
.TP 20
|
|
[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.
|
|
.TP 20
|
|
[ECONNREFUSED]
|
|
The remote port was invalid when using the
|
|
.I send
|
|
call on a connected datagram socket.
|
|
.TP 20
|
|
[EISCONN]
|
|
A
|
|
.I sendto
|
|
or
|
|
.I sendmsg
|
|
call was used on a connected socket.
|
|
.TP 20
|
|
[EACCES]
|
|
The requested operation specified a broadcast address as the destination
|
|
but the SO_BROADCAST socket option was not enabled (see
|
|
.IR setsockopt (2)).
|
|
.TP 20
|
|
[EHOSTUNREACH]
|
|
The remote host was unreachable via the network.
|
|
.TP 20
|
|
[ENETUNREACH]
|
|
The remote network is unknown to the routing system.
|
|
.TP 20
|
|
[EHOSTDOWN]
|
|
The remote host was determined to be down, possibly due to a failure to resolve
|
|
its MAC-level address (see
|
|
.IR arp (7P)).
|
|
.SH SEE ALSO
|
|
fcntl(2), recv(2), select(2), getsockopt(2), socket(2), write(2)
|
|
.SH NOTE
|
|
ABI-compliant versions of the above call can be obtained from
|
|
.IR libsocket.so .
|
|
'\".so /pubs/tools/origin.bsd
|