Event EventBufferEvent::connectHost
(PECL event >= 1.2.6-beta)
EventBufferEvent::connectHost — 선택적으로 비동기 DNS 확인을 사용하여 호스트 이름에 연결
설명
public EventBufferEvent::connectHost( EventDnsBase $dns_base , string $hostname , int $port , int $family = EventUtil::AF_UNSPEC ): bool
family
유형의 주소를 찾는 DNS 이름 호스트 이름을 확인합니다( EventUtil::AF_*
상수). 이름 확인이 실패하면 오류 이벤트와 함께 이벤트 콜백을 호출합니다. 성공하면 EventBufferEvent::connect()와 마찬가지로 연결 시도를 시작합니다.
dns_base
는 선택 사항입니다. null
이거나 EventDnsBase::__construct()로 생성된 객체일 수 있습니다. 비동기식 호스트 이름 확인의 경우 유효한 이벤트 dns 기본 리소스를 전달합니다. 그렇지 않으면 호스트 이름 확인이 차단됩니다.
메모: EventDnsBase는 Event
가 구성된 --with-event-extra( event_extra
라이브러리, HTTP, DNS 및 RPC를 포함한 libevent 프로토콜별 기능 지원)인 경우에만 사용할 수 있습니다.
메모: EventBufferEvent::connectHost()에는 libevent-2.0.3-alpha
이상이 필요합니다.
매개변수
dns_base
- DNS가 비동기식으로 확인되는 경우 EventDnsBase의 개체입니다. 그렇지 않으면
null
입니다. hostname
- 연결할 호스트 이름입니다. 인식되는 형식은 다음과 같습니다.
www.example.com (hostname) 1.2.3.4 (ipv4address) ::1 (ipv6address) [::1] ([ipv6address])
port
- 포트 번호
family
- 주소 가족.
EventUtil::AF_UNSPEC
,EventUtil::AF_INET
또는EventUtil::AF_INET6
. EventUtil constants를 참조하십시오.
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다.
Examples
예제 #1 EventBufferEvent::connectHost() 예제
<?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();
?>
위의 예는 다음과 유사한 결과를 출력합니다.
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: SAMEORIGIN301 Moved 301 Moved
The document has moved here. Closing Done
기타
- EventBufferEvent::connect() - 버퍼 이벤트의 파일 디스크립터를 주어진 주소 또는 UNIX 소켓에 연결