blob: f7e1454a74fa85cef704616fa0e49c393e713bf9 [file] [log] [blame]
<html lang="en">
<head>
<title>Sending Data - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Transferring-Data.html#Transferring-Data" title="Transferring Data">
<link rel="next" href="Receiving-Data.html#Receiving-Data" title="Receiving Data">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Sending-Data"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Receiving-Data.html#Receiving-Data">Receiving Data</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Transferring-Data.html#Transferring-Data">Transferring Data</a>
<hr>
</div>
<h5 class="subsubsection">16.9.5.1 Sending Data</h5>
<p><a name="index-sys_002fsocket_002eh-1806"></a>The <code>send</code> function is declared in the header file
<samp><span class="file">sys/socket.h</span></samp>. If your <var>flags</var> argument is zero, you can just
as well use <code>write</code> instead of <code>send</code>; see <a href="I_002fO-Primitives.html#I_002fO-Primitives">I/O Primitives</a>. If the socket was connected but the connection has broken,
you get a <code>SIGPIPE</code> signal for any use of <code>send</code> or
<code>write</code> (see <a href="Miscellaneous-Signals.html#Miscellaneous-Signals">Miscellaneous Signals</a>).
<!-- sys/socket.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>send</b> (<var>int socket, void *buffer, size_t size, int flags</var>)<var><a name="index-send-1807"></a></var><br>
<blockquote><p>The <code>send</code> function is like <code>write</code>, but with the additional
flags <var>flags</var>. The possible values of <var>flags</var> are described
in <a href="Socket-Data-Options.html#Socket-Data-Options">Socket Data Options</a>.
<p>This function returns the number of bytes transmitted, or <code>-1</code> on
failure. If the socket is nonblocking, then <code>send</code> (like
<code>write</code>) can return after sending just part of the data.
See <a href="File-Status-Flags.html#File-Status-Flags">File Status Flags</a>, for information about nonblocking mode.
<p>Note, however, that a successful return value merely indicates that
the message has been sent without error, not necessarily that it has
been received without error.
<p>The following <code>errno</code> error conditions are defined for this function:
<dl>
<dt><code>EBADF</code><dd>The <var>socket</var> argument is not a valid file descriptor.
<br><dt><code>EINTR</code><dd>The operation was interrupted by a signal before any data was sent.
See <a href="Interrupted-Primitives.html#Interrupted-Primitives">Interrupted Primitives</a>.
<br><dt><code>ENOTSOCK</code><dd>The descriptor <var>socket</var> is not a socket.
<br><dt><code>EMSGSIZE</code><dd>The socket type requires that the message be sent atomically, but the
message is too large for this to be possible.
<br><dt><code>EWOULDBLOCK</code><dd>Nonblocking mode has been set on the socket, and the write operation
would block. (Normally <code>send</code> blocks until the operation can be
completed.)
<br><dt><code>ENOBUFS</code><dd>There is not enough internal buffer space available.
<br><dt><code>ENOTCONN</code><dd>You never connected this socket.
<br><dt><code>EPIPE</code><dd>This socket was connected but the connection is now broken. In this
case, <code>send</code> generates a <code>SIGPIPE</code> signal first; if that
signal is ignored or blocked, or if its handler returns, then
<code>send</code> fails with <code>EPIPE</code>.
</dl>
<p>This function is defined as a cancellation point in multi-threaded
programs, so one has to be prepared for this and make sure that
allocated resources (like memory, files descriptors, semaphores or
whatever) are freed even if the thread is canceled.
<!-- @xref{pthread_cleanup_push}, for a method how to do this. -->
</p></blockquote></div>
</body></html>