EventBufferEvent::connectHost
(PECL event >= 1.2.6-beta)
EventBufferEvent::connectHost — Connects to a hostname with optionally asyncronous DNS resolving
Description
$dns_base
,
string
$hostname
,
int
$port
[,
int
$family
= EventUtil::AF_UNSPEC
] )
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.
Note:
EventDnsBase is available only if Event configured --with-event-extra ( event_extra library, libevent protocol-specific functionality support including HTTP, DNS, and RPC ).
Note:
EventBufferEvent::connectHost() requires libevent-2.0.3-alpha or greater.
Parameters
-
dns_base
-
Object of EventDnsBase in case if DNS is to be resolved asyncronously. Otherwise
NULL
. -
hostname
-
Hostname to connect to. Recognized formats are:
www.example.com (hostname) 1.2.3.4 (ipv4address) ::1 (ipv6address) [::1] ([ipv6address])
-
port
-
Port number
-
family
-
Address family.
EventUtil::AF_UNSPEC
,EventUtil::AF_INET
, orEventUtil::AF_INET6
. See EventUtil constants .
Return Values
Returns TRUE
on success. Otherwise FALSE
.
Examples
Example #1 EventBufferEvent::connectHost() example
<?php
/* 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($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();
$dns_base = new EventDnsBase($base, TRUE); // We'll use async DNS resolving
if (!$dns_base) {
exit("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) {
exit("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"
)) {
exit("Failed adding request to output buffer\n");
}
if (!$bev->connectHost($dns_base, $argv[1], 80, EventUtil::AF_UNSPEC)) {
exit("Can't connect to host {$argv[1]}\n");
}
$base->dispatch();
?>
The above example will output something similar to:
Connected. 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> Closing Done
See Also
- EventBufferEvent::connect() - Connect buffer event's file descriptor to given address or UNIX socket
- EventBufferEvent::close
- EventBufferEvent::connect
- Функция EventBufferEvent::connectHost() - Connects to a hostname with optionally asyncronous DNS resolving
- Функция EventBufferEvent::__construct() - Constructs EventBufferEvent object
- Функция EventBufferEvent::createPair() - Creates two buffer events connected to each other
- Функция EventBufferEvent::disable() - Disable events read, write, or both on a buffer event.
- Функция EventBufferEvent::enable() - Enable events read, write, or both on a buffer event.
- Функция EventBufferEvent::free() - Free a buffer event
- Функция EventBufferEvent::getDnsErrorString() - Returns string describing the last failed DNS lookup attempt
- Функция EventBufferEvent::getEnabled() - Returns bitmask of events currently enabled on the buffer event
- EventBufferEvent::getInput
- EventBufferEvent::getOutput
- Функция EventBufferEvent::read() - Read buffer's data
- Функция EventBufferEvent::readBuffer() - Drains the entire contents of the input buffer and places them into buf
- Функция EventBufferEvent::setCallbacks() - Assigns read, write and event(status) callbacks
- Функция EventBufferEvent::setPriority() - Assign a priority to a bufferevent
- Функция EventBufferEvent::setTimeouts() - Set the read and write timeout for a buffer event
- Функция EventBufferEvent::setWatermark() - Adjusts read and/or write watermarks
- Функция EventBufferEvent::sslError() - Returns most recent OpenSSL error reported on the buffer event
- Функция EventBufferEvent::sslFilter() - Create a new SSL buffer event to send its data over another buffer event
- EventBufferEvent::sslGetCipherInfo
- EventBufferEvent::sslGetCipherName
- EventBufferEvent::sslGetCipherVersion
- EventBufferEvent::sslGetProtocol
- Функция EventBufferEvent::sslRenegotiate() - Tells a bufferevent to begin SSL renegotiation.
- Функция EventBufferEvent::sslSocket() - Creates a new SSL buffer event to send its data over an SSL on a socket
- Функция EventBufferEvent::write() - Adds data to a buffer event's output buffer
- EventBufferEvent::writeBuffer
Коментарии
404 Not Found