(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recvfrom — 接続しているかどうかによらず、ソケットからデータを受信する
$socket
,&$data
,$length
,$flags
,&$address
,&$port
= null
socket_recvfrom() 関数は、 ポート port
(AF_UNIX
型のソケットである場合を除く) 上の address
から受信した length
バイトのデータを data
に格納します。 socket_recvfrom() は、 接続済みのソケットだけでなく接続していないソケットに対しても使用可能です。 さらに、フラグを指定することでこの関数の挙動を設定できます。
address
と port
は参照渡しとしなければなりません。接続していないソケットの場合は、 address
はリモートホストの IP アドレスか UNIX ソケットへのパスとなります。接続済みのソケットの場合は、 address
は null
とします。 また、AF_INET
あるいは AF_INET6
形式のまだ接続していないソケットの場合、 port
にはリモートホストのポート番号を指定します。
注意: この関数はバイナリデータに対応しています。
socket
socket
には、 socket_create() で作成した Socket クラスのインスタンスを指定します。
data
受信したデータが data
に格納されます。
length
最大 length
バイトまでのデータをリモートホストから取得します。
flags
flags
の値は、以下のフラグの任意の組み合わせを 論理 OR 演算子 (|
) で連結したものとなります。
フラグ | 説明 |
---|---|
MSG_OOB | 帯域外 (out-of-band) のデータを処理する。 |
MSG_PEEK | 受信キューの先頭にあるデータを受信し、 そのデータをそのままキューに残しておく。 |
MSG_WAITALL | 少なくとも length バイト受信するまではブロックする。 しかし、もし何らかのシグナルを受信したりリモートホストとの接続が切断された場合は これより少ないバイト数を返す可能性がある。 |
MSG_DONTWAIT | 通常はブロックする場面であってもそのまま return する。 |
address
AF_UNIX
型のソケットの場合は、 address
はファイルへのパスとなります。 それ以外の場合は、未接続のソケットの場合には address
はリモートホストの IP アドレスとなります。 接続済みソケットの場合は null
となります。
port
この引数は AF_INET
型あるいは AF_INET6
型のソケットに対してのみ適用され、 データを受信するリモートホストのポートを指定します。 接続済みソケットの場合は port
は null
となります。
socket_recvfrom() は、受信したバイト数を返します。 あるいはエラー時には false
を返します。 エラーコードを取得するには socket_last_error() をコールします。取得したエラーコードを socket_strerror() に渡すと、 そのエラーについての説明を得ることができます。
バージョン | 説明 |
---|---|
8.0.0 | socket は、Socket クラスのインスタンスになりました。 これより前のバージョンでは、リソース型でした。 |
例1 socket_recvfrom() の例
<?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;
?>
この例は、127.0.0.1 のポート 1223 との UDP ソケットを確立し、受信したデータを最大 12 バイトまで表示します。