EventBufferEvent::connect

(PECL event >= 1.2.6-beta)

EventBufferEvent::connectConnecte le descripteur de fichier du tampon d'événement à l'adresse fournie, ou au socket UNIX

Description

publicEventBufferEvent::connect(string$addr): bool

Connecte le descripteur de fichier du tampon d'événement à l'adresse fournie (optionnellement, en fournissant le port), ou au socket UNIX.

Si le socket n'est pas assigné au tampon d'événements, cette méthode alloue un nouveau socket et le rend non bloquant en interne.

Pour résoudre les noms DNS (de façon asynchrone), utilisez la méthode EventBufferEvent::connectHost().

Liste de paramètres

addr

Doit contenir une adresse IP avec, optionnellement, le numéro du port, ou un chemin vers le socket UNIX. Les formats reconnus sont :

[IPv6Address]:port [IPv6Address] IPv6Address IPv4Address:port IPv4Address unix:path
Notez que le préfixe 'unix:' n'est actuellement pas sensible à la casse.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec EventBufferEvent::connect()

<?php



function readcb($bev, $base) {
$input = $bev->getInput();

while ((
$n = $input->remove($buf, 1024)) > 0) {
echo
$buf;
}
}


function eventcb($bev, $events, $base) {
if (
$events & EventBufferEvent::CONNECTED) {
echo
"Connecté.\n";
} elseif (
$events & (EventBufferEvent::ERROR | EventBufferEvent::EOF)) {
if (
$events & EventBufferEvent::ERROR) {
echo
"Erreur DNS : ", $bev->getDnsErrorString(), PHP_EOL;
}

echo
"Fermeture\n";
$base->exit();
exit(
"Fait !\n");
}
}

$base = new EventBase();

echo
"étape 1\n";
$bev = new EventBufferEvent($base, NULL,
EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS);
if (!
$bev) {
exit(
"Echec lors de la création du socket bufferevent\n");
}

echo
"étape 2\n";
$bev->setCallbacks("readcb", NULL, "eventcb", $base);
$bev->enable(Event::READ | Event::WRITE);

echo
"étape 3\n";

$output = $bev->getOutput();
if (!
$output->add(
"GET /index.cphp HTTP/1.0\r\n".
"Connection: Close\r\n\r\n"
)) {
exit(
"Echec lors de l'ajout de la demande dans le tampon de sortie\n");
}


if (!$bev->connect("127.0.0.1:80")) {
exit(
"Impossible de se connecter à l'hôte\n");
}


$base->dispatch();

Résultat de l'exemple ci-dessus est similaire à :

étape 1 étape 2 étape 3 Connecté. HTTP/1.1 200 OK Server: nginx/1.2.6 Date: Sat, 09 Mar 2013 10:06:58 GMT Content-Type: text/html; charset=utf-8 Connection: close X-Powered-By: PHP/5.4.11--pl2-gentoo sdfsdfsf Fermeture Fait !

Exemple #2 Connexion à un socket UNIX, lecture de la réponse depuis le serveur, et affichage dans une console

<?php
class MyUnixSocketClient {
private
$base, $bev;

function
__construct($base, $sock_path) {
$this->base = $base;
$this->bev = new EventBufferEvent($base, NULL, EventBufferEvent::OPT_CLOSE_ON_FREE,
array (
$this, "read_cb"), NULL, array ($this, "event_cb"));

if (!
$this->bev->connect("unix:$sock_path")) {
trigger_error("Echec lors de la connexion au socket `$sock_path'", E_USER_ERROR);
}

$this->bev->enable(Event::READ);
}

function
__destruct() {
if (
$this->bev) {
$this->bev->free();
$this->bev = NULL;
}
}

function
dispatch() {
$this->base->dispatch();
}

function
read_cb($bev, $unused) {
$in = $bev->input;

printf("Réception de %ld octets\n", $in->length);
printf("----- données ----\n");
printf("%ld:\t%s\n", (int) $in->length, $in->pullup(-1));

$this->bev->free();
$this->bev = NULL;
$this->base->exit(NULL);
}

function
event_cb($bev, $events, $unused) {
if (
$events & EventBufferEvent::ERROR) {
echo
"Erreur depuis bufferevent\n";
}

if (
$events & (EventBufferEvent::EOF | EventBufferEvent::ERROR)) {
$bev->free();
$bev = NULL;
} elseif (
$events & EventBufferEvent::CONNECTED) {
$bev->output->add("test\n");
}
}
}

if (
$argc <= 1) {
exit(
"Le chemin vers le socket n'est pas fourni\n");
}
$sock_path = $argv[1];

$base = new EventBase();
$cl = new MyUnixSocketClient($base, $sock_path);
$cl->dispatch();
?>

Résultat de l'exemple ci-dessus est similaire à :

Réception de 5 octets ----- données ---- 5: test

Voir aussi

To Top