socket_recvfrom
(PHP 4 >= 4.1.0, PHP 5)
socket_recvfrom — 接続しているかどうかによらず、ソケットからデータを受信する
説明
$socket
, string &$buf
, int $len
, int $flags
, string &$name
[, int &$port
] )
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 演算子 (|) で連結したものとなります。flagsに使用できる値フラグ 説明 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() はバイナリセーフとなりました。 |
参考
- socket_recv() - 接続したソケットからデータを受信する
- socket_send() - 接続したソケットにデータを送信する
- socket_sendto() - 接続しているかどうかによらずソケットにメッセージを送信する
- socket_create() - ソケット(通信時の終端)を作成する