stream_socket_pair
stream_socket_sendto
ストリーム 関数
PHP Manual

# stream_socket_recvfrom

(PHP 5)

stream_socket_recvfrom — 接続されているかどうかにかかわらず、ソケットからのデータを受信する

### 説明

string stream_socket_recvfrom ( resource `$socket` , int `$length` [, int `$flags` = 0 [, string `&$address` ]] )

stream_socket_recvfrom() は、 リモートソケットから最大 `length` バイトのデータを 受け取ります。

### パラメータ

`socket`

  リモートソケット。

`length`

  `socket` から受信するバイト数。

`flags`

  `flags` は以下の値の組み合わせです。

  `flags` でとりうる値
  `STREAM_OOB` | OOB (out-of-band) データを処理します。
  `STREAM_PEEK` | ソケットからデータを取得しますが、バッファを消費しません。 fread() あるいは stream_socket_recvfrom() を続けてコールした 際には、同じデータが読み込まれます。

`address`

  `address` が指定された場合、 そこにはリモートソケットのアドレスが保存されます。

### 返り値

読み込んだデータを文字列で返します。

### 例

例1 stream_socket_recvfrom() の例

`<?php
/* localhost のポート 1234 へのサーバソケットをオープンします */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* 接続を受け付けます */
$socket = stream_socket_accept($server);
/* OOB データのパケットを取得します（1500 は典型的な MTU のサイズです） */
echo "Received Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* 通常の帯域内のデータを読み込みますが、バッファを消費しません */
echo "Data: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* 同じパケットをもう一度読み込みます。今度はバッファからそれを削除します */
echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* ソケットを閉じます */
fclose($socket);
fclose($server);
?>`

### 注意

> 注意: 受信したメッセージが `length` パラメータより 長かった場合、ソケットの型によっては（例えば UDP など）超過分の バイトデータが捨てられてしまう可能性があります。

> 注意: バッファベースのストリーム関数 (fread() あるいは stream_get_line() など) をコールした後に ソケットベースのストリームで stream_socket_recvfrom() をコールすると、ストリームバッファを経由せず、データをソケットから 直接読み込みます。

### 参考

- stream_socket_sendto() - 接続されているかどうかにかかわらず、ソケットにデータを送信する
- stream_socket_client() - インターネットドメインまたは Unix ドメインのソケット接続を開く
- stream_socket_server() - インターネットドメインまたは Unix ドメインのサーバソケットを作成する

stream_socket_pair
stream_socket_sendto
ストリーム 関数
PHP Manual