(PECL event >= 1.2.6-beta)
EventBufferEvent::connectHost — Conexión a un host
$dns_base
   ,$hostname
   ,$port
   ,$family
     = EventUtil::AF_UNSPEC
   
   Resuelve el nombre de host DNS, buscando la dirección del tipo
   family (constante EventUtil::AF_*).
   Si la resolución del nombre falla, la función de retrollamada del evento
   será llamada con un evento de error. Si la resolución tiene éxito,
   se realizará un intento de conexión, de manera similar a como lo hace el método
   EventBufferEvent::connect().
  
   El parámetro dns_base es opcional.
   Puede ser null, o bien un objeto creado con el método
   EventDnsBase::__construct().
   Para una resolución de nombre de host asíncrona, pase una fuente de evento de base DNS válida. De lo contrario, la resolución del nombre de host
   será bloqueante.
  
Nota:
EventDnsBase solo está disponible si
Eventestá configurado con la opción --with-event-extra (bibliotecaevent_extra, el soporte de las funcionalidades específicas de libevent incluyendo HTTP, DNS y RPC).
Nota:
EventBufferEvent::connectHost() requiere
libevent-2.0.3-alphao posteriores.
dns_base
    
      Objeto EventDnsBase en el caso
      donde el DNS debe ser resuelto de manera asíncrona. De lo contrario, null.
     
hostname
    El nombre de host al cual se intenta realizar la conexión. Los formatos reconocidos son:
www.example.com (hostname) 1.2.3.4 (ipv4address) ::1 (ipv6address) [::1] ([ipv6address])
port
    El número del puerto
family
    
      Familia de la dirección.
      EventUtil::AF_UNSPEC,
      EventUtil::AF_INET o
      EventUtil::AF_INET6. Ver las
      constantes EventUtil.
     
Ejemplo #1 Ejemplo con EventBufferEvent::connectHost()
<?php
/* Función de retrollamada de lectura */
function readcb($bev, $base) {
    //$input = $bev->input; //$bev->getInput();
    //$pos = $input->search("TTP");
    $pos = $bev->input->search("TTP");
    while (($n = $bev->input->remove($buf, 1024)) > 0) {
        echo $buf;
    }
}
/* Función de retrollamada del evento */
function eventcb($bev, $events, $base) {
    if ($events & EventBufferEvent::CONNECTED) {
        echo "Conectado.\n";
    } elseif ($events & (EventBufferEvent::ERROR | EventBufferEvent::EOF)) {
        if ($events & EventBufferEvent::ERROR) {
            echo "Error DNS: ", $bev->getDnsErrorString(), PHP_EOL;
        }
        echo "Cerrando\n";
        $base->exit();
        exit("Hecho !\n");
    }
}
$base = new EventBase();
$dns_base = new EventDnsBase($base, TRUE); // Resolución DNS asíncrona
if (!$dns_base) {
    exit("Fallo en la inicialización de la base DNS\n");
}
$bev = new EventBufferEvent($base, /* uso de un socket interno */ NULL,
    EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS,
    "readcb", /* writecb */ NULL, "eventcb", $base
);
if (!$bev) {
    exit("Fallo al crear el socket bufferevent\n");
}
//$bev->setCallbacks("readcb", /* writecb */ NULL, "eventcb", $base);
$bev->enable(Event::READ | Event::WRITE);
$output = $bev->output; //$bev->getOutput();
if (!$output->add(
    "GET {$argv[2]} HTTP/1.0\r\n".
    "Host: {$argv[1]}\r\n".
    "Connection: Close\r\n\r\n"
)) {
    exit("Fallo al añadir la solicitud en el búfer de salida\n");
}
if (!$bev->connectHost($dns_base, $argv[1], 80, EventUtil::AF_UNSPEC)) {
    exit("Imposible conectar al host {$argv[1]}\n");
}
$base->dispatch();
?>Resultado del ejemplo anterior es similar a:
Conectado. HTTP/1.0 301 Moved Permanently Location: http://www.google.co.uk/ Content-Type: text/html; charset=UTF-8 Date: Sat, 09 Mar 2013 12:21:19 GMT Expires: Mon, 08 Apr 2013 12:21:19 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 221 X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.co.uk/">here</A>. </BODY></HTML> Cerrando Hecho !
