Signatur
Beschreibung
ZMQPollException ist eine spezialisierte Ausnahmeklasse innerhalb der ZMQ-PHP-Extension (ZeroMQ). Sie wird geworfen, wenn bei einem Poll-Vorgang auf einem oder mehreren ZMQSocket-Objekten ein Fehler auftritt, der nicht durch den normalen Rückgabewert abgedeckt werden kann.
Typische Auslöser sind ungültige oder bereits geschlossene Sockets im Poll-Set, Ressourcenprobleme oder interne ZeroMQ-Fehler während des Wartevorgangs auf Ereignisse. Die Klasse erbt von ZMQException, welche selbst RuntimeException erweitert, sodass alle bekannten Exception-Methoden wie getMessage(), getCode() und getTrace() zur Verfügung stehen.
In der Praxis sollte jeder Poll-Aufruf über ZMQPoll::poll() in einem try-catch-Block abgesichert werden, der sowohl ZMQPollException als auch allgemeine ZMQException-Fälle behandelt. Der Fehlercode entspricht in der Regel dem systemnahen errno-Wert aus der zugrundeliegenden libzmq-Bibliothek.
Beispiele
Abfangen eines Poll-Fehlers mit ZMQPollException
<?php
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_REP);
$socket->bind('tcp://127.0.0.1:5555');
$poll = new ZMQPoll();
$poll->add($socket, ZMQ::POLL_IN);
$readable = [];
$writable = [];
try {
$events = $poll->poll($readable, $writable, 1000); // Timeout: 1000 ms
echo 'Ereignisse: ' . $events . PHP_EOL;
} catch (ZMQPollException $e) {
echo 'Poll-Fehler [Code ' . $e->getCode() . ']: ' . $e->getMessage() . PHP_EOL;
} catch (ZMQException $e) {
echo 'Allgemeiner ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Mehrere Sockets polllen und Ausnahme behandeln
<?php
$context = new ZMQContext();
$push = $context->getSocket(ZMQ::SOCKET_PUSH);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$push->bind('tcp://127.0.0.1:5556');
$pull->connect('tcp://127.0.0.1:5556');
$poll = new ZMQPoll();
$poll->add($pull, ZMQ::POLL_IN);
$push->send('Hallo ZMQ');
$readable = [];
$writable = [];
try {
$events = $poll->poll($readable, $writable, 500);
foreach ($readable as $sock) {
echo 'Empfangen: ' . $sock->recv() . PHP_EOL;
}
} catch (ZMQPollException $e) {
error_log('ZMQPollException: ' . $e->getMessage() . ' (errno=' . $e->getCode() . ')');
}
// Wichtig · Fallstricke
Fehlercode: Der über getCode() zurückgegebene Wert entspricht dem nativen errno-Wert der libzmq-Bibliothek. Typische Werte sind z. B. ETERM (Kontext wurde beendet) oder EFAULT (ungültiger Socket im Poll-Set).
Ressourcenverwaltung: Sockets, die aus dem Poll-Set entfernt oder bereits geschlossen wurden, können ZMQPollException auslösen. Stellen Sie sicher, dass Sockets beim Hinzufügen zu einem ZMQPoll-Objekt noch gültig und verbunden sind.
Hinweis zur Extension: Die zmq-PHP-Extension ist nicht Teil der PHP-Standarddistribution und muss über PECL installiert werden. Die Verfügbarkeit der Klasse hängt von der installierten Version ab.