Dutch PHP Conference 2021 - Call for Papers


(PECL event >= 1.2.6-beta)

EventBufferEvent::connectHostConnects to a hostname with optionally asyncronous DNS resolving


public EventBufferEvent::connectHost ( EventDnsBase $dns_base , string $hostname , int $port , int $family = EventUtil::AF_UNSPEC ) : bool

Resolves the DNS name hostname, looking for addresses of type family ( EventUtil::AF_* constants). If the name resolution fails, it invokes the event callback with an error event. If it succeeds, it launches a connection attempt just as EventBufferEvent::connect() would.

dns_base is optional. May be null, or an object created with EventDnsBase::__construct() . For asyncronous hostname resolving pass a valid event dns base resource. Otherwise the hostname resolving will block.


EventDnsBase is available only if Event configured --with-event-extra ( event_extra library, libevent protocol-specific functionality support including HTTP, DNS, and RPC ).


EventBufferEvent::connectHost() requires libevent-2.0.3-alpha or greater.

Список параметров


Object of EventDnsBase in case if DNS is to be resolved asyncronously. Otherwise null.


Hostname to connect to. Recognized formats are:

www.example.com (hostname) (ipv4address)
 ::1 (ipv6address)
[::1] ([ipv6address])


Port number


Address family. EventUtil::AF_UNSPEC , EventUtil::AF_INET , or EventUtil::AF_INET6 . See EventUtil constants .

Возвращаемые значения

Returns true on success. Otherwise false.


Пример #1 EventBufferEvent::connectHost() example

/* Read callback */
function readcb($bev$base) {
//$input = $bev->input; //$bev->getInput();

    //$pos = $input->search("TTP");
$pos $bev->input->search("TTP");

    while ((
$n $bev->input->remove($buf1024)) > 0) {

/* Event callback */
function eventcb($bev$events$base) {
    if (
$events EventBufferEvent::CONNECTED) {
    } elseif (
$events & (EventBufferEvent::ERROR EventBufferEvent::EOF)) {
        if (
$events EventBufferEvent::ERROR) {
"DNS error: "$bev->getDnsErrorString(), PHP_EOL;


$base = new EventBase();

$dns_base = new EventDnsBase($baseTRUE); // We'll use async DNS resolving
if (!$dns_base) {
"Failed to init DNS Base\n");

$bev = new EventBufferEvent($base/* use internal socket */ NULL,
EventBufferEvent::OPT_CLOSE_ON_FREE EventBufferEvent::OPT_DEFER_CALLBACKS,
"readcb"/* writecb */ NULL"eventcb"$base
if (!
$bev) {
"Failed creating bufferevent socket\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"
)) {
"Failed adding request to output buffer\n");

if (!
$bev->connectHost($dns_base$argv[1], 80EventUtil::AF_UNSPEC)) {
"Can't connect to host {$argv[1]}\n");


Результатом выполнения данного примера будет что-то подобное:

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">
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.co.uk/">here</A>.

Смотрите также

  • EventBufferEvent::connect() - Подключает файловый дескриптор события буфера к указанному адресу или сокету UNIX
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top