Documentación offline PHP master

EventListener::__construct

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

EventListener::__construct

Crea un nuevo oyente de conexión asociado con la base de eventos

Descripción#

public EventListener::__construct(EventBase $base, callable $cb, mixed $data, int $flags, int $backlog, mixed $target)
```php

Crea un nuevo oyente de conexión asociado con la base de eventos.

## Parámetros

`base`  
Base de eventos asociada.

`cb`  
Un `callable` que será invocado cuando una nueva conexión sea recibida.

`data`  
Datos de usuario personalizados adjuntos al parámetro `cb`.

`flags`  
Una máscara de constantes `EventListener::OPT_*`. Ver las [constantes EventListener](#eventlistener.constants).

`backlog`  
Controla el número máximo de conexiones en espera que la pila de red permite esperar en un estado "aún no aceptado"; ver la documentación de la función `listen` de su sistema para más detalles. Si el parámetro `backlog` es negativo, Libevent intenta obtener un buen valor para este parámetro; si es cero, Event asume que la función del sistema `listen` ya ha sido llamada en el socket (`target`).

`target`  
Puede ser un string, un recurso de socket, o un flujo asociado con un socket. En el caso de que este parámetro sea un string, será analizado como dirección IP. Será analizado como socket de dominio UNIX si está prefijado por `'unix:'`, por ejemplo, `'unix:/tmp/my.sock'`.

## Historial de cambios

| Versión          | Descripción                                        |
|------------------|----------------------------------------------------|
| PECL event 1.5.0 | Se añadió el soporte para sockets de dominio UNIX. |

## Ejemplos

Ejemplo con `EventListener::__construct`
bev->free(); } public function __construct($base, $fd) { $this->base = $base; $this->bev = new EventBufferEvent($base, $fd, EventBufferEvent::OPT_CLOSE_ON_FREE); $this->bev->setCallbacks(array($this, "echoReadCallback"), NULL, array($this, "echoEventCallback"), NULL); if (!$this->bev->enable(Event::READ)) { echo "Imposible habilitar READ\n"; return; } } public function echoReadCallback($bev, $ctx) { // Copia todos los datos desde el buffer de entrada hacia el buffer de salida // Variante #1 $bev->output->addBuffer($bev->input); /* Variante #2 */ /* $input = $bev->getInput(); $output = $bev->getOutput(); $output->addBuffer($input); */ } public function echoEventCallback($bev, $events, $ctx) { if ($events & EventBufferEvent::ERROR) { echo "Error desde bufferevent\n"; } if ($events & (EventBufferEvent::EOF | EventBufferEvent::ERROR)) { //$bev->free(); $this->__destruct(); } } } class MyListener { public $base, $listener, $socket; private $conn = array(); public function __destruct() { foreach ($this->conn as &$c) $c = NULL; } public function __construct($port) { $this->base = new EventBase(); if (!$this->base) { echo "Imposible abrir la base del evento"; exit(1); } // Variante #1 /* $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!socket_bind($this->socket, '0.0.0.0', $port)) { echo "Imposible enlazar el socket\n"; exit(1); } $this->listener = new EventListener($this->base, array($this, "acceptConnCallback"), $this->base, EventListener::OPT_CLOSE_ON_FREE | EventListener::OPT_REUSEABLE, -1, $this->socket); */ // Variante #2 $this->listener = new EventListener($this->base, array($this, "acceptConnCallback"), $this->base, EventListener::OPT_CLOSE_ON_FREE | EventListener::OPT_REUSEABLE, -1, "0.0.0.0:$port"); if (!$this->listener) { echo "No se pudo crear el oyente"; exit(1); } $this->listener->setErrorCallback(array($this, "accept_error_cb")); } public function dispatch() { $this->base->dispatch(); } // Esta función de retrollamada es llamada cuando hay datos para leer desde $bev public function acceptConnCallback($listener, $fd, $address, $ctx) { // ¡Tenemos una nueva conexión! Se le define un bufferevent. */ $base = $this->base; $this->conn[] = new MyListenerConnection($base, $fd); } public function accept_error_cb($listener, $ctx) { $base = $this->base; fprintf(STDERR, "Error recibido %d (%s) en el oyente. " ."Cerrando.\n", EventUtil::getLastSocketErrno(), EventUtil::getLastSocketError()); $base->exit(NULL); } } $port = 9808; if ($argc > 1) { $port = (int) $argv[1]; } if ($port <= 0 || $port > 65535) { exit("Puerto inválido"); } $l = new MyListener($port); $l->dispatch(); ?>

```php