PHP マニュアル
前のページ |  | 次のページ

# stream_socket_recvfrom

(PHP 5)

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

## 説明

string stream_socket_recvfrom ( resource socket, int length [, int flags [, string &address]] )

関数 stream_socket_recvfrom() は、 リモートソケットから最大 length バイトのデータを 受け取ります。address が指定された場合、 そこにはリモートソケットのアドレスが保存されます。

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

表 1. flags でとりうる値

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

例 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() および stream_socket_server() も参照ください。

前のページ | ホーム | 次のページ
stream_socket_pair | 上に戻る | stream_socket_sendto