socket_recvfrom
接続しているかどうかによらず、ソケットからデータを受信する
説明
intfalse socket_recvfrom(
Socket $socket
,
string &$data
,
int $length
,
int $flags
,
string &$address
,
int &$port
= null
)
address
と port
は参照渡しとしなければなりません。接続していないソケットの場合は、
address
はリモートホストの IP アドレスか
UNIX ソケットへのパスとなります。接続済みのソケットの場合は、
address
は null
とします。
また、AF_INET
あるいは
AF_INET6
形式のまだ接続していないソケットの場合、
port
にはリモートホストのポート番号を指定します。
注意: この関数はバイナリデータに対応しています。
パラメータ
-
socket
-
socket
には、
socket_create() で作成した Socket クラスのインスタンスを指定します。
-
data
-
受信したデータが
data
に格納されます。
-
length
-
最大 length
バイトまでのデータをリモートホストから取得します。
-
flags
-
flags
の値は、以下のフラグの任意の組み合わせを
論理 OR 演算子 (|
) で連結したものとなります。
flags
に使用できる値
フラグ |
説明 |
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 に渡すと、
そのエラーについての説明を得ることができます。
例
例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 バイトまで表示します。
参考
- socket_recv
- socket_send
- socket_sendto
- socket_create