blob: 3e374200fc144434ea39c83a95934e4161b38927 [file] [log] [blame]
<html lang="en">
<head>
<title>Sending Datagrams - 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="Datagrams.html#Datagrams" title="Datagrams">
<link rel="next" href="Receiving-Datagrams.html#Receiving-Datagrams" title="Receiving Datagrams">
<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-Datagrams"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Receiving-Datagrams.html#Receiving-Datagrams">Receiving Datagrams</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Datagrams.html#Datagrams">Datagrams</a>
<hr>
</div>
<h4 class="subsection">16.10.1 Sending Datagrams</h4>
<p><a name="index-sending-a-datagram-1818"></a><a name="index-transmitting-datagrams-1819"></a><a name="index-datagrams_002c-transmitting-1820"></a>
<a name="index-sys_002fsocket_002eh-1821"></a>The normal way of sending data on a datagram socket is by using the
<code>sendto</code> function, declared in <samp><span class="file">sys/socket.h</span></samp>.
<p>You can call <code>connect</code> on a datagram socket, but this only
specifies a default destination for further data transmission on the
socket. When a socket has a default destination you can use
<code>send</code> (see <a href="Sending-Data.html#Sending-Data">Sending Data</a>) or even <code>write</code> (see <a href="I_002fO-Primitives.html#I_002fO-Primitives">I/O Primitives</a>) to send a packet there. You can cancel the default
destination by calling <code>connect</code> using an address format of
<code>AF_UNSPEC</code> in the <var>addr</var> argument. See <a href="Connecting.html#Connecting">Connecting</a>, for
more information about the <code>connect</code> function.
<!-- sys/socket.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>sendto</b> (<var>int socket, void *buffer. size_t size, int flags, struct sockaddr *addr, socklen_t length</var>)<var><a name="index-sendto-1822"></a></var><br>
<blockquote><p>The <code>sendto</code> function transmits the data in the <var>buffer</var>
through the socket <var>socket</var> to the destination address specified
by the <var>addr</var> and <var>length</var> arguments. The <var>size</var> argument
specifies the number of bytes to be transmitted.
<p>The <var>flags</var> are interpreted the same way as for <code>send</code>; see
<a href="Socket-Data-Options.html#Socket-Data-Options">Socket Data Options</a>.
<p>The return value and error conditions are also the same as for
<code>send</code>, but you cannot rely on the system to detect errors and
report them; the most common error is that the packet is lost or there
is no-one at the specified address to receive it, and the operating
system on your machine usually does not know this.
<p>It is also possible for one call to <code>sendto</code> to report an error
owing to a problem related to a previous call.
<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>