Rechercher une fonction PHP

socket_select

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

socket_selectFührt einen select()-Systemaufruf auf den gegebenen Socket-Arrays aus, wobei ein Zeitlimit bestimmt wird

Beschreibung

socket_select ( array &$read , array &$write , array &$except , int $tv_sec [, int $tv_usec = 0 ] ) : int

socket_select() nimmt als Parameter Socket-Arrays entgegen und wartet, ob diese ihren Status ändern. Diejenigen, die Hintergrundwissen über BSD-Sockets haben, werden feststellen, dass diese Socket-Arrays in Wirklichkeit die sogenannten Datei-Deskriptor-Mengen sind. Drei voneinander unabhängige Arrays mit Socket-Deskriptoren werden überwacht.

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Parameter-Liste

read

Die Sockets, die im read-Array aufgelistet sind, werden daraufhin überwacht, ob Zeichen zum Auslesen zur Verfügung gestellt werden. (Um genauer zu sein: es wird überwacht, ob ein Lesevorgang nicht blockiert würde - ein Socket ist nämlich auch dann bereit, wenn er bis zum Dateiende gelesen hat. In diesem Fall gibt socket_read() einen leeren String zurück.)

write

Die Sockets, die im write-Array aufgelistet sind, werden daraufhin überwacht, ob ein Schreibvorgang nicht blockiert würde.

except

Die Sockets, die im except-Array aufgelistet sind, werden auf Ausnahmen überwacht.

tv_sec

tv_sec und tv_usec bilden zusammen den timeout-Parameter. Der timeout ist eine obere Schranke für die Zeit, die verstreichen kann, bis socket_select() zurückkehrt. tv_sec kann 0 sein, wodurch socket_select() sofort zurückkehrt. Dies ist nützlich beim Polling. Falls der Parameter tv_sec NULL ist (kein Timeout), kann socket_select() unendlich lange blockieren.

tv_usec

Warnung

Beim Beenden werden alle Arrays aktualisiert, und zeigen an, welche Sockets ihren Status geändert haben.

Sie brauchen nicht jedes Array einzeln an socket_select() übergeben. Sie können die Arrays auch weglassen und stattdessen leere Arrays oder NULL angeben. Vergessen Sie nicht, dass diese Arrays per Referenz übergeben werden, und dass sie verändert werden, nachdem die Funktion socket_select() beendet ist.

Hinweis:

Wegen einer Einschränkung in der aktuellen Zend Engine ist es nicht möglich, eine Konstante, wie etwa NULL, direkt als Parameter an Funktionen zu übergeben, die ihre Argumente als Referenzen erwarten. Statt dessen kann eine temporäre Variable oder eine Ausdruck, in dem der am weitesten links stehende Teilausdruck eine temporäre Variable ist, verwendet werden.

Beispiel #1 NULL mit socket_select() benutzen:

<?php
$e 
NULL;
socket_select($r$w$e0);
?>

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Rückgabewerte

Bei Erfolg gibt socket_select() die Anzahl der Socket-Deskriptoren zurück, die in den aktualisierten Arrays enthalten sind. Falls der Timeout wirksam wird, bevor irgend etwas Interessantes passiert, ist das Funktionsergebnis 0. Falls ein Fehler auftritt, wird FALSE zurückgegeben. Der Fehlercode kann dann mit socket_last_error() abgefragt werden.

Hinweis:

Wenn ein Fehler aufgespürt werden soll, muss unbedingt der Operator === benutzt werden. Weil socket_select() auch 0 zurückgeben kann, wird der Vergleich mit == sonst zu TRUE ausgewertet.

Beispiel #2 Rückgaben von socket_select() verstehen

<?php
$e 
NULL;
if (
false === socket_select($r$w$e0)) {
    echo 
"socket_select() fehlgeschlagen, Grund: " .
        
socket_strerror(socket_last_error()) . "\n";
}
?>

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Beispiele

Beispiel #3 socket_select()-Beispiel

<?php
/* Das Array read vorbereiten */
$read   = array($socket1$socket2);
$write  NULL;
$except NULL;
$num_changed_sockets socket_select($read$write$except0);

if (
$num_changed_sockets === false) {
    
/* Fehlerbehandlung */
} else if ($num_changed_sockets 0) {
    
/* Mindestens an einem Socket ist etwas Interessantes passiert */
}
?>

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Anmerkungen

Hinweis:

Seien Sie sich bewusst, dass manche Socket-Implementierungen sehr sorgfältig benutzt werden müssen. Ein paar grundsätzliche Regeln:

  • Sie sollten immer versuchen, socket_select() ohne Timeout zu benutzen. Ihr Programm sollte nichts zu tun haben, wenn keine Daten verfügbar sind. Code, der von Zeitbegrenzungen abhängig ist, ist normalerweise nicht portierbar und schwierig zu debuggen.
  • Es darf kein Socket-Deskriptor in die Arrays eingefügt werden, wenn Sie nicht vorhaben, die Ergebnisse nach der Ausführung von socket_select() zu prüfen und entsprechend darauf zu reagieren. Nachdem socket_select() beendet ist, müssen alle Sockets in allen Socket-Arrays geprüft werden. Jeder Socket, der zum Schreiben zur Verfügung steht, muss beschrieben werden und aus jedem Socket, der zum Lesen verfügbar ist, muss gelesen werden.
  • Bei Schreib-/Leseoperationen auf den Sockets in den Arrays muss damit gerechnnet werden, dass nicht notwendigerweise alle Daten geschrieben/gelesen werden, die angeben wurden. Seien Sie darauf vorbereitet, dass Sie möglicherweise nur ein einziges Byte schreiben/lesen können.
  • Fast allen Socket-Implementierungen ist gemeinsam, dass sie nur eine einzige Ausnahme in dem Array except auffangen können. Und zwar, wenn bandexterne Daten von einem Socket empfangen werden.

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Siehe auch

Finde eine PHP-Funktion

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-socket-select.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:fr Manuel PHP : http://php.net

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut