関数・クラス解説

socket_create_pair

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

区別できないソケットの組を作成し、配列に保存する

公式リファレンス

書式

socket_create_pair ( int $domain , int $type , int $protocol , array &$fd ) : bool

説明

socket_create_pair() は、接続されており区別できない 2 つのソケットを作成し、それを fd に保存します。 この関数は、一般に IPC(InterProcess Communication: プロセス間通信) で使用します。

パラメータ

domain
domain は、ソケットで使用するプロトコルの種類を指定します。 完全な一覧は socket_create() を参照ください。
type
type では、ソケットが使用する通信の形式を選択します。 完全な一覧は socket_create() を参照ください。
protocol
protocol は、指定した domain の中の特定のプロトコルを指定します。これは、返されるソケットとの通信に使用されます。 使用可能な値の名前は getprotobyname() で取得可能です。もし要求されるプロトコルが TCP あるいは UDP の場合、 対応する定数 SOL_TCP および SOL_UDP も使用可能です。 サポートするプロトコルの完全な一覧は socket_create() を参照ください。
fd
2 つのソケットリソースが格納される配列への参照。

返値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

サンプル

例1 socket_create_pair() の例

$sockets = array(); /* Windows では AF_INET を使う必要があります */ $domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX); /* ソケットの組の設定 */ if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false) {     echo "socket_create_pair failed. Reason: ".socket_strerror(socket_last_error()); } /* データの送受信 */ if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {     echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($sockets[0])); } if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {     echo "socket_read() failed. Reason: ".socket_strerror(socket_last_error($sockets[1])); } var_dump($data); /* ソケットのクローズ */ socket_close($sockets[0]); socket_close($sockets[1]);

例2 socket_create_pair() での IPC の例

$ary = array(); $strone = 'Message From Parent.'; $strtwo = 'Message From Child.'; if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {     echo "socket_create_pair() failed. Reason: ".socket_strerror(socket_last_error()); } $pid = pcntl_fork(); if ($pid == -1) {     echo 'プロセスを fork できません。'; } elseif ($pid) {     /* 親プロセス */     socket_close($ary[0]);     if (socket_write($ary[1], $strone, strlen($strone)) === false) {         echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[1]));     }     if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {         echo "Received $strtwo\n";     }     socket_close($ary[1]); } else {     /* 子プロセス */     socket_close($ary[1]);     if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {         echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[0]));     }     if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {         echo "Received $strone\n";     }     socket_close($ary[0]); }

参考

  • socket_create() - ソケット(通信時の終端)を作成する
  • socket_create_listen() - 接続を受けつけるためにポートにソケットをオープンする
  • socket_bind() - ソケットに名前をバインドする
  • socket_listen() - ソケット上で接続待ち(listen)する
  • socket_last_error() - ソケットの直近のエラーを返す
  • socket_strerror() - ソケットエラーの内容を文字列として返す
  • ワード検索


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

    関数名アルファベット別

    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用の拡張モジュール