socket_recvfrom

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

socket_recvfrom接続しているかどうかによらず、ソケットからデータを受信する

説明

socket_recvfrom ( resource $socket , string &$buf , int $len , int $flags , string &$name [, int &$port ] ) : int

socket_recvfrom() 関数は、 ポート port (AF_UNIX 型のソケットである場合を除く) 上の name から受信した len バイトのデータを buf に格納します。 socket_recvfrom() は、 接続済みのソケットだけでなく接続していないソケットに対しても使用可能です。 さらに、フラグを指定することでこの関数の挙動を設定できます。

nameport は参照渡しとしなければなりません。接続していないソケットの場合は、 name はリモートホストの IP アドレスか UNIX ソケットへのパスとなります。接続済みのソケットの場合は、 nameNULL とします。 また、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 型のソケットに対してのみ適用され、 データを受信するリモートホストのポートを指定します。 接続済みソケットの場合は portNULL となります。

返り値

socket_recvfrom() は、受信したバイト数を返します。 あるいはエラー時には FALSE を返します。 エラーコードを取得するには socket_last_error() をコールします。取得したエラーコードを socket_strerror() に渡すと、 そのエラーについての説明を得ることができます。

例1 socket_recvfrom() の例

<?php
error_reporting
(E_ALL E_STRICT);

$socket socket_create(AF_INETSOCK_DGRAMSOL_UDP);
socket_bind($socket'127.0.0.1'1223);

$from '';
$port 0;
socket_recvfrom($socket$buf120$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() - ソケット(通信時の終端)を作成する