(PECL event >= 1.2.6-beta)
EventBufferEvent::connect — Подключает файловый дескриптор события буфера к указанному адресу или сокету UNIX
Подключает файловый дескриптор события буфера к указанному адресу (опционально с портом) или сокету UNIX.
Если сокет не назначен событию буфера, функция выделяет новый сокет и делает его внутренним неблокирующим.
Чтобы разрешить DNS-имена (асинхронно), используйте метод EventBufferEvent::connectHost().
addr
    Должен содержать IP-адрес с необязательным номером порта или путь к сокету домена UNIX. Допустимые форматы:
[IPv6Address]:port [IPv6Address] IPv6Address IPv4Address:port IPv4Address unix:path
'unix:'
      в настоящее время не чувствителен к регистру.
     
    
   Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
  
Пример #1 Пример использования EventBufferEvent::connect()
<?php
/*
 * 1. Подключение к 127.0.0.1 и порту 80
 * by means of EventBufferEvent::connect().
 *
 * 2. Запрос /index.cphp с помощью HTTP/1.0
 * используя выходной буфер.
 *
 * 3. Асинхронно прочитайте ответ и распечатайте его стандартным выводом.
 */
/* Чтение callback-функции */
function readcb($bev, $base) {
    $input = $bev->getInput();
    while (($n = $input->remove($buf, 1024)) > 0) {
        echo $buf;
    }
}
/* Событие callback-функции */
function eventcb($bev, $events, $base) {
    if ($events & EventBufferEvent::CONNECTED) {
        echo "Подключено.\n";
    } elseif ($events & (EventBufferEvent::ERROR | EventBufferEvent::EOF)) {
        if ($events & EventBufferEvent::ERROR) {
            echo "DNS ошибка: ", $bev->getDnsErrorString(), PHP_EOL;
        }
        echo "Закрытие\n";
        $base->exit();
        exit("Завершено\n");
    }
}
$base = new EventBase();
echo "шаг 1\n";
$bev = new EventBufferEvent($base, /* используйте внутренний сокет */ NULL,
    EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS);
if (!$bev) {
    exit("Не удалось создать сокет bufferevent\n");
}
echo "шаг 2\n";
$bev->setCallbacks("readcb", /* writecb */ NULL, "eventcb", $base);
$bev->enable(Event::READ | Event::WRITE);
echo "шаг 3\n";
/* Послать запрос */
$output = $bev->getOutput();
if (!$output->add(
    "GET /index.cphp HTTP/1.0\r\n".
    "Connection: Close\r\n\r\n"
)) {
    exit("Не удалось добавить запрос в выходной буфер\n");
}
/* Подключение к хосту синхронно.
 * Мы знаем IP, и нам не нужно разрешать DNS. */
if (!$bev->connect("127.0.0.1:80")) {
    exit("Не удаётся подключиться к хосту\n");
}
/* Отправка ожидающих событий */
$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 Подключитесь к сокету домена UNIX, который предположительно обслуживается сервером, прочитайте ответ сервера и выведите его на консоль
<?php
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("Получено %ld байтов\n", $in->length);
        printf("----- данные ----\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 "Ошибка 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("Путь к сокету не указан\n");
}
$sock_path = $argv[1];
$base = new EventBase();
$cl = new MyUnixSocketClient($base, $sock_path);
$cl->dispatch();
?>Вывод приведённого примера будет похож на:
Получено 5 байтов ----- данные ---- 5: test
