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 기본 리소스를 전달합니다. 그렇지 않으면 호스트 이름 확인이 차단됩니다.

메모: EventDnsBaseEvent가 구성된 --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: SAMEORIGIN


301 Moved

301 Moved

The document has moved here. Closing Done

기타