1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/reference/sockets/functions/socket-recvfrom.xml
2021-08-18 21:47:15 +09:00

248 lines
8.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: de9c65c91ff1710d8b2d2ec955caea0162679305 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<refentry xml:id="function.socket-recvfrom" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>socket_recvfrom</refname>
<refpurpose>接続しているかどうかによらず、ソケットからデータを受信する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>int</type><type>false</type></type><methodname>socket_recvfrom</methodname>
<methodparam><type>Socket</type><parameter>socket</parameter></methodparam>
<methodparam><type>string</type><parameter role="reference">data</parameter></methodparam>
<methodparam><type>int</type><parameter>length</parameter></methodparam>
<methodparam><type>int</type><parameter>flags</parameter></methodparam>
<methodparam><type>string</type><parameter role="reference">address</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">port</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
<function>socket_recvfrom</function> 関数は、
ポート <parameter>port</parameter> (<constant>AF_UNIX</constant>
型のソケットである場合を除く) 上の <parameter>address</parameter>
から受信した <parameter>length</parameter> バイトのデータを
<parameter>data</parameter> に格納します。
<function>socket_recvfrom</function> は、
接続済みのソケットだけでなく接続していないソケットに対しても使用可能です。
さらに、フラグを指定することでこの関数の挙動を設定できます。
</para>
<para>
<parameter>address</parameter><parameter>port</parameter>
は参照渡しとしなければなりません。接続していないソケットの場合は、
<parameter>address</parameter> はリモートホストの IP アドレスか
UNIX ソケットへのパスとなります。接続済みのソケットの場合は、
<parameter>address</parameter>&null; とします。
また、<constant>AF_INET</constant> あるいは
<constant>AF_INET6</constant> 形式のまだ接続していないソケットの場合、
<parameter>port</parameter> にはリモートホストのポート番号を指定します。
</para>
&note.bin-safe;
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>socket</parameter></term>
<listitem>
<para>
<parameter>socket</parameter> には、
socket_create() で作成した <classname>Socket</classname> クラスのインスタンスを指定します。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>data</parameter></term>
<listitem>
<para>
受信したデータが
<parameter>data</parameter> に格納されます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>length</parameter></term>
<listitem>
<para>
最大 <parameter>length</parameter> バイトまでのデータをリモートホストから取得します。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
<parameter>flags</parameter> の値は、以下のフラグの任意の組み合わせを
論理 OR 演算子 (<literal>|</literal>) で連結したものとなります。
</para>
<table>
<title><parameter>flags</parameter> に使用できる値</title>
<tgroup cols="2">
<thead>
<row>
<entry>フラグ</entry>
<entry>説明</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>MSG_OOB</constant></entry>
<entry>
帯域外 (out-of-band) のデータを処理する。
</entry>
</row>
<row>
<entry><constant>MSG_PEEK</constant></entry>
<entry>
受信キューの先頭にあるデータを受信し、
そのデータをそのままキューに残しておく。
</entry>
</row>
<row>
<entry><constant>MSG_WAITALL</constant></entry>
<entry>
少なくとも <parameter>length</parameter> バイト受信するまではブロックする。
しかし、もし何らかのシグナルを受信したりリモートホストとの接続が切断された場合は
これより少ないバイト数を返す可能性がある。
</entry>
</row>
<row>
<entry><constant>MSG_DONTWAIT</constant></entry>
<entry>
通常はブロックする場面であってもそのまま return する。
</entry>
</row>
</tbody>
</tgroup>
</table>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>address</parameter></term>
<listitem>
<para>
<constant>AF_UNIX</constant> 型のソケットの場合は、
<parameter>address</parameter> はファイルへのパスとなります。
それ以外の場合は、未接続のソケットの場合には
<parameter>address</parameter> はリモートホストの IP アドレスとなります。
接続済みソケットの場合は &null; となります。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>port</parameter></term>
<listitem>
<para>
この引数は <constant>AF_INET</constant> 型あるいは
<constant>AF_INET6</constant> 型のソケットに対してのみ適用され、
データを受信するリモートホストのポートを指定します。
接続済みソケットの場合は
<parameter>port</parameter>&null; となります。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<function>socket_recvfrom</function> は、受信したバイト数を返します。
あるいはエラー時には &false; を返します。
エラーコードを取得するには <function>socket_last_error</function>
をコールします。取得したエラーコードを
<function>socket_strerror</function> に渡すと、
そのエラーについての説明を得ることができます。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
&sockets.changelog.socket-param;
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>socket_recvfrom</function> の例</title>
<programlisting role="php">
<![CDATA[
<?php
$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 "リモートアドレス $from のポート $port から $buf を受信しました" . PHP_EOL;
?>
]]>
</programlisting>
<para>
この例は、127.0.0.1 のポート 1223
との UDP ソケットを確立し、受信したデータを最大 12 バイトまで表示します。
</para>
</example>
</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
-->