関数・クラス解説

socket_recv

version:PHP 4 >= 4.1.0, PHP 5, PHP 7 (公式)

接続したソケットからデータを受信する

公式リファレンス

書式

socket_recv ( resource $socket , string &$buf , int $len , int $flags ) : int

説明

socket_recv() 関数は、 socket から len バイトのデータを受信して buf に格納します。 socket_recv() を使うと、 接続したソケットからデータを収集することができます。 さらに、フラグを指定して関数の挙動を変更することもできます。

buf は参照渡しなので、 引数リストには変数で渡さなければなりません。 socket から socket_recv() で読み込んだデータが buf に入ります。

パラメータ

socket
socket は、事前に socket_create() で作成したソケットリソースでなければなりません。
buf
受信したデータが、 buf で指定した変数に格納されます。 エラーが発生したり接続がリセットされたりデータが存在しなかったりした場合は、 buf には NULL が設定されます。
len
最大 len バイトまでをリモートホストから取得します。
flags
flags の値は、次のフラグを論理 OR (|) 演算子で組み合わせたものとなります。
flags のとりうる値
フラグ 説明
MSG_OOB out-of-band を処理します。
MSG_PEEK 受信キューの先頭からデータを取得し、受信したデータをキューから削除しません。
MSG_WAITALL 最低 len バイト受信するまでブロックします。 しかし、シグナルを受け取ったりリモートホストが接続を切断したりした場合は、 この関数が返すデータがそれより少なくなる可能性があります。
MSG_DONTWAIT このフラグを設定すると、正常にブロックされている状態でも関数が結果を返します。

返値

socket_recv() は、受信したバイト数を返します。 エラーが発生した場合は FALSE を返します。 実際のエラーコードを取得するには socket_last_error() をコールします。 このエラーコードを socket_strerror() に渡すと、エラーに関する説明テキストを取得することができます。

サンプル

例1 socket_recv() の例

この例は、 例 の最初の例を書き換えて socket_recv() を使う形式にしたものです。

error_reporting(E_ALL); echo "

TCP/IP Connection

\n"; /* WWW サービスのポートを取得します */ $service_port = getservbyname('www', 'tcp'); /* 対象となるホストの IP アドレスを取得します */ $address = gethostbyname('www.example.com'); /* TCP/IP ソケットを作成します */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) {     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else {     echo "OK.\n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) {     echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else {     echo "OK.\n"; } $in = "HEAD / HTTP/1.1\r\n"; $in .= "Host: www.example.com\r\n"; $in .= "Connection: Close\r\n\r\n"; $out = ''; echo "Sending HTTP HEAD request..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading response:\n\n"; $buf = 'This is my buffer.'; if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {     echo "Read $bytes bytes from socket_recv(). Closing socket..."; } else {     echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n"; } socket_close($socket); echo $buf . "\n"; echo "OK.\n\n";

上の例の出力は、このようになります。

<h2>TCP/IP Connection</h2> OK. Attempting to connect to '208.77.188.166' on port '80'...OK. Sending HTTP HEAD request...OK. Reading response: Read 123 bytes from socket_recv(). Closing socket...HTTP/1.1 200 OK Date: Mon, 14 Sep 2009 08:56:36 GMT Server: Apache/2.2.3 (Red Hat) Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT ETag: "b80f4-1b6-80bfd280" Accept-Ranges: bytes Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8 OK.

ワード検索


※入力キーワードが、関数名・説明文・タグに含まれるものを検索

関数名アルファベット別

A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z _

最終更新一覧

stristr
 大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

stripslashes
 バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

stripos
 大文字小文字を区別せずに文字列が最初に現れる位置を取得する

stripcslashes
 addcslashes() でクォートされた文字列をアンクォートする

strip_tags
 文字列から HTML と PHP のタグを除去して返却

strcspn
 指定した文字が最初に現れる位置を調べる

strcoll
 ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

strcmp
 2つの文字列を比較し同じか(あるいは大小)を判定する

strchr
 strstr() のエイリアス

strcasecmp
 2つの文字列を比較(大文字小文字を区別せず同じとみなす)

カテゴリー一覧

PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール