関数・クラス解説

EventBufferEvent::connect

version:PECL event >= 1.2.6-beta (公式)

Connect buffer event's file descriptor to given address or UNIX socket

公式リファレンス

書式

public EventBufferEvent::connect ( string $addr ) : bool

説明

Connect buffer event's file descriptor to given address(optionally with port), or a UNIX domain socket.

If socket is not assigned to the buffer event, this function allocates a new socket and makes it non-blocking internally.

To resolve DNS names(asyncronously), use EventBufferEvent::connectHost() method.

パラメータ

addr
Should contain an IP address with optional port number, or a path to UNIX domain socket. Recognized formats are:
[IPv6Address]:port[IPv6Address]IPv6AddressIPv4Address:portIPv4Addressunix:path
Note, 'unix:' prefix is currently not case sensitive.

返値

Returns TRUE on success. Otherwise FALSE.

サンプル

例1 EventBufferEvent::connect() example

<?php/* * 1. Connect to 127.0.0.1 at port 80 * by means of EventBufferEvent::connect(). * * 2. Request /index.cphp via HTTP/1.0 * using the output buffer. * * 3. Asyncronously read the response and print it to stdout. *//* Read callback */function readcb($bev, $base) {    $input = $bev->getInput();    while (($n = $input->remove($buf, 1024)) > 0) {        echo $buf;    }}/* Event callback */function eventcb($bev, $events, $base) {    if ($events & EventBufferEvent::CONNECTED) {        echo "Connected.\n";    } elseif ($events & (EventBufferEvent::ERROR | EventBufferEvent::EOF)) {        if ($events & EventBufferEvent::ERROR) {            echo "DNS error: ", $bev->getDnsErrorString(), PHP_EOL;        }        echo "Closing\n";        $base->exit();        exit("Done\n");    }}$base = new EventBase();echo "step 1\n";$bev = new EventBufferEvent($base, /* use internal socket */ NULL,    EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS);if (!$bev) {    exit("Failed creating bufferevent socket\n");}echo "step 2\n";$bev->setCallbacks("readcb", /* writecb */ NULL, "eventcb", $base);$bev->enable(Event::READ | Event::WRITE);echo "step 3\n";/* Send request */$output = $bev->getOutput();if (!$output->add(    "GET /index.cphp HTTP/1.0\r\n".    "Connection: Close\r\n\r\n")) {    exit("Failed adding request to output buffer\n");}/* Connect to the host syncronously. * We know the IP, and don't need to resolve DNS. */if (!$bev->connect("127.0.0.1:80")) {    exit("Can't connect to host\n");}/* Dispatch pending events */$base->dispatch();

上の例の出力は、たとえば以下のようになります。

step 1 step 2 step 3 Connected. HTTP/1.1 200 OK Server: nginx/1.2.6 Date: Sat, 09 Mar 2013 10:06:58 GMT Content-Type: text/html; charset=utf-8 Connection: close X-Powered-By: PHP/5.4.11--pl2-gentoo sdfsdfsf Closing Done

例2 Connect to UNIX domain socket which presumably is served by a server, read response from the server and output it to the console

class MyUnixSocketClient {     private $base, $bev;     function __construct($base, $sock_path) {         $this->base = $base;         $this->bev = new EventBufferEvent($base, NULL, EventBufferEvent::OPT_CLOSE_ON_FREE,             array ($this, "read_cb"), NULL, array ($this, "event_cb"));         if (!$this->bev->connect("unix:$sock_path")) {             trigger_error("Failed to connect to socket `$sock_path'", E_USER_ERROR);         }         $this->bev->enable(Event::READ);     }     function __destruct() {         if ($this->bev) {             $this->bev->free();             $this->bev = NULL;         }     }     function dispatch() {         $this->base->dispatch();     }     function read_cb($bev, $unused) {         $in = $bev->input;         printf("Received %ld bytes\n", $in->length);         printf("----- data ----\n");         printf("%ld:\t%s\n", (int) $in->length, $in->pullup(-1));         $this->bev->free();         $this->bev = NULL;         $this->base->exit(NULL);     }     function event_cb($bev, $events, $unused) {         if ($events & EventBufferEvent::ERROR) {             echo "Error from bufferevent\n";         }         if ($events & (EventBufferEvent::EOF | EventBufferEvent::ERROR)) {             $bev->free();             $bev = NULL;         } elseif ($events & EventBufferEvent::CONNECTED) {             $bev->output->add("test\n");         }     } } if ($argc <= 1) {     exit("Socket path is not provided\n"); } $sock_path = $argv[1]; $base = new EventBase(); $cl = new MyUnixSocketClient($base, $sock_path); $cl->dispatch();

上の例の出力は、たとえば以下のようになります。

Received 5 bytes ----- data ---- 5: test

参考

  • EventBufferEvent::connectHost() - Connects to a hostname with optionally asyncronous DNS resolving
  • ワード検索


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

    関数名アルファベット別

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