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