<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.socket-recvfrom"> <refnamediv> <refname>socket_recvfrom</refname> <refpurpose>Receives data from a socket whether or not it is connection-oriented</refpurpose> </refnamediv> <refsect1 role="description"> &reftitle.description; <methodsynopsis> <type>int</type><methodname>socket_recvfrom</methodname> <methodparam><type>resource</type><parameter>socket</parameter></methodparam> <methodparam><type>string</type><parameter role="reference">buf</parameter></methodparam> <methodparam><type>int</type><parameter>len</parameter></methodparam> <methodparam><type>int</type><parameter>flags</parameter></methodparam> <methodparam><type>string</type><parameter role="reference">name</parameter></methodparam> <methodparam choice="opt"><type>int</type><parameter role="reference">port</parameter></methodparam> </methodsynopsis> <para> The <function>socket_recvfrom</function> function receives <parameter>len</parameter> bytes of data in <parameter>buf</parameter> from <parameter>name</parameter> on port <parameter>port</parameter> (if the socket is not of type <constant>AF_UNIX</constant>) using <parameter>socket</parameter>. <function>socket_recvfrom</function> can be used to gather data from both connected and unconnected sockets. Additionally, one or more flags can be specified to modify the behaviour of the function. </para> <para> The <parameter>name</parameter> and <parameter>port</parameter> must be passed by reference. If the socket is not connection-oriented, <parameter>name</parameter> will be set to the internet protocol address of the remote host or the path to the UNIX socket. If the socket is connection-oriented, <parameter>name</parameter> is &null;. Additionally, the <parameter>port</parameter> will contain the port of the remote host in the case of an unconnected <constant>AF_INET</constant> or <constant>AF_INET6</constant> socket. </para> </refsect1> <refsect1 role="parameters"> &reftitle.parameters; <para> <variablelist> <varlistentry> <term><parameter>socket</parameter></term> <listitem> <para> The <parameter>socket</parameter> must be a socket resource previously created by socket_create(). </para> </listitem> </varlistentry> <varlistentry> <term><parameter>buf</parameter></term> <listitem> <para> The data received will be fetched to the variable specified with <parameter>buf</parameter>. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>len</parameter></term> <listitem> <para> Up to <parameter>len</parameter> bytes will be fetched from remote host. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>flags</parameter></term> <listitem> <para> The value of <parameter>flags</parameter> can be any combination of the following flags, joined with the binary OR (<literal>|</literal>) operator. </para> <table> <title>Possible values for <parameter>flags</parameter></title> <tgroup cols="2"> <thead> <row> <entry>Flag</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><constant>MSG_OOB</constant></entry> <entry> Process out-of-band data. </entry> </row> <row> <entry><constant>MSG_PEEK</constant></entry> <entry> Receive data from the beginning of the receive queue without removing it from the queue. </entry> </row> <row> <entry><constant>MSG_WAITALL</constant></entry> <entry> Block until at least <parameter>len</parameter> are received. However, if a signal is caught or the remote host disconnects, the function may return less data. </entry> </row> <row> <entry><constant>MSG_DONTWAIT</constant></entry> <entry> With this flag set, the function returns even if it would normally have blocked. </entry> </row> </tbody> </tgroup> </table> </listitem> </varlistentry> <varlistentry> <term><parameter>name</parameter></term> <listitem> <para> If the socket is of the type <constant>AF_UNIX</constant> type, <parameter>name</parameter> is the path to the file. Else, for unconnected sockets, <parameter>name</parameter> is the IP address of, the remote host, or &null; if the socket is connection-oriented. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>port</parameter></term> <listitem> <para> This argument only applies to <constant>AF_INET</constant> and <constant>AF_INET6</constant> sockets, and specifies the remote port from which the data is received. If the socket is connection-oriented, <parameter>port</parameter> will be &null;. </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <para> <function>socket_recvfrom</function> returns the number of bytes received, or &false; if there was an error. The actual error code can be retrieved by calling <function>socket_last_error</function>. This error code may be passed to <function>socket_strerror</function> to get a textual explanation of the error. </para> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title><function>socket_recvfrom</function> example</title> <programlisting role="php"> <![CDATA[ <?php error_reporting(E_ALL | E_STRICT); $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_bind($socket, '127.0.0.1', 1223); $from = ''; $port = 0; socket_recvfrom($socket, $buf, 12, 0, $from, $port); echo "Received $buf from remote address $from and remote port $port" . PHP_EOL; ?> ]]> </programlisting> <para> This example will initiate a UDP socket on port 1223 of 127.0.0.1 and print at most 12 characters received from a remote host. </para> </example> </para> </refsect1> <refsect1 role="changelog"> &reftitle.changelog; <para> <informaltable> <tgroup cols="2"> <thead> <row> <entry>&Version;</entry> <entry>&Description;</entry> </row> </thead> <tbody> <row> <entry>4.3.0</entry> <entry> <function>socket_recvfrom</function> is now binary safe. </entry> </row> </tbody> </tgroup> </informaltable> </para> </refsect1> <refsect1 role="seealso"> &reftitle.seealso; <para> <simplelist> <member><function>socket_recv</function></member> <member><function>socket_send</function></member> <member><function>socket_sendto</function></member> <member><function>socket_create</function></member> </simplelist> </para> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->