Diese Socket-Funktionen kommunizieren direkt mit dem Internetprotokoll, um Informationen zu senden. Im Vergleich zu Fopensocks Streams arbeiten sie auf einem relativ niedrigen Niveau. Normalerweise kapseln sie C-Funktionen und haben ähnliche Namen. Wenn Sie Erfahrung mit der Socket-Programmierung in C haben, werden Sie mit diesen Funktionen sehr vertraut sein. Wir werden hier nicht im Detail auf die Socket-Programmierung eingehen.
Verwenden Sie diese Funktionen, um schwierige Probleme zu lösen, die Funktionen höherer Ebene nicht lösen können. Durch die Verwendung dieser Funktionen können ähnliche Funktionen wie fopen erreicht werden. Sie haben möglicherweise viele Möglichkeiten, Socket-Funktionen zu implementieren, z. B. den Internet-Daemon, der mithilfe der CLI (Befehlszeilenschnittstelle) in PHP implementiert wird.
Ressource socket_accept(Ressourcensocket)
Verwenden Sie auf der Serverseite Ihres Skripts socket_accept, um eine eingehende Verbindung zu akzeptieren. Sie müssen zunächst einen Socket erstellen, ihn an einen Namen binden und ihn so einstellen, dass er einen Port überwacht. Im Blockmodus generiert socket_accept eine eindeutig akzeptierte Verbindung. Im Nicht-Block-Modus wird „false“ zurückgegeben, wenn keine Verbindung hergestellt wird. Wenn Sie über eine neue Socket-Ressource verfügen, können Sie außerdem Lese- und Schreibvorgänge ausführen.
Im Folgenden demonstrieren wir einen einfachen Echo-Server. Es läuft unter der CLI (Befehlszeile) und wartet auf Clientverbindungen an Port 12345.
socket_accept
<?php
set_time_limit(0);
//den Socket erstellen
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("Socket konnte nicht erstellt werden: " . socket_strerror(socket_last_error()) . "n");
}
//binde es an die angegebene Adresse und den angegebenen Port
if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("Socket konnte nicht gebunden werden: " . socket_strerror(socket_last_error()) . "n");
}
if(($error = socket_listen($socket, 5)) < 0){
print("Auf Socket konnte nicht aufgelistet werden: " .
socket_strerror(socket_last_error()) "n");
}
while(TRUE){
//auf Verbindung warten
if(($accept = socket_accept($socket)) < 0){
print("Fehler beim Lesen: " . socket_strerror($message) . "n");
brechen;
}
//Willkommensnachricht senden
socket_write($accept, "Verbindung akzeptiertn");
print(date('Ymd H:i:s') . " STATUS: Verbindung akzeptiertn");
ob_flush();
while(TRUE){
//Zeile vom Client lesen
if(FALSE === ($line = socket_read($accept, 1024))){
print("Konnte nicht aus Socket lesen: " .
socket_strerror(socket_last_error()) "n");
Pause 2;
}
if( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . " STATUS: Verbindung unterbrochenn");
brechen;
}
print(date('Ymd H:i:s') . " READ: $line");
ob_flush();
}
socket_close($accept);
}
?>
bool socket_bind(Ressourcen-Socket, String-Adresse, Integer-Port)
Dieses socket_bind() bindet eine Socket-Ressource an eine Adresse. Dieser Socket muss eine von der Funktion socket_create() zurückgegebene Ressource sein. Diese Adresse muss eine IP-Adresse oder ein Pfad zu einem Unix-Socket sein. Wenn es sich um einen Socket handelt, der im Internet läuft, müssen Sie auch einen Port bereitstellen.
socket_clear_error(Ressourcen-Socket)
Diese Funktion kann Fehler für den angegebenen Socket löschen. Wenn keine Parameter angegeben werden, werden alle Socket-Fehler gelöscht.
socket_close(Ressourcen-Socket)
Die Funktion socket_close schließt einen Socket und löscht die vom Socket belegten Speicherressourcen.
boolean socket_connect(Ressourcen-Socket, String-Adresse, Integer-Port)
Diese Funktion erstellt eine Client-Verbindung zu einem Port oder Socket. Sie müssen einen von socket_create generierten Socket bereitstellen. Der Adressparameter muss der Pfad zu einem Socket oder einer IP-Adresse sein. Im letzteren Fall muss zusätzlich eine numerische Portnummer folgen.
Das folgende Beispiel zeigt den Prozess der Verbindung zum Spieleserver und des Abrufens von Informationen mithilfe des UDP-Protokolls.
socket_connect
<?php
//UDP-Socket erstellen
if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("Socket konnte nicht erstellt werden: " .
socket_strerror(socket_last_error()) "n");
}
//Timeout nach 5 Sekunden
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//Verbindung zum RtCW-Masterserver herstellen
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("Verbindung konnte nicht hergestellt werden: " .
socket_strerror(socket_last_error()) "n");
}
//Anfrage für Server senden
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//Server abrufen
$server = array();
while(FALSE !== ($line = @socket_read($socket, 4096))){
//Daten analysieren
for($i=22; ($i+5) < strlen($line); $i += 7){
$ip = ord(substr($line, $i+1, 1)) .
ord(substr($i+2, 1)) .
ord(substr($i+3, 1)) .
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$server[] = array('ip'=>$ip, 'port'=>$port);
}
}
print("<h1>" . count($server). " Server</h1>n");
//Loop über Server, Status abrufen
foreach($server as $s){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
//Verbindung zum RtCW-Server herstellen
if(!socket_connect($socket, $s['ip'], $s['port'])){
print("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
weitermachen;
}
//Statusanfrage senden
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//Status vom Server abrufen
if(FALSE === ($line = @socket_read($socket, 1024))){
print("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
weitermachen;
}
$part = explosion("n", $line);
//Einstellungen stehen in der zweiten Zeile, getrennt durch Backslashes
$setting = explosion("\", $part[1]);
print("<h2>Konfiguration</h2>n");
print("<p>n");
for($s=1; $s < count($setting); $s += 2){
print("tt{$setting[$s]} = {$setting[$s+1]}<br>n");
}
print("</p>n");
print("<h2>Spieler</h2>n");
$lastPlayer = count($part) - 1;
for($p=2; $p < $lastPlayer; $p++){
$player = explosion(" ", $part[$p]);
print("{$player[2]} Score={$player[0]} " .
"Ping={$player[1]}<br>n");
}
print("</p>n");
ob_flush();
}
print("</table>n");
socket_close($socket);
?>
Ressource socket_create(Integer-Familie, Integer-Socket-Typ, Integer-Protokoll)
socket_create initialisiert eine Socket-Struktur. Der erste Parameter ist eine Protokollfamilie oder Domäne. Sie müssen AF_INET verwenden, um eine Internetverbindung anzugeben, oder AF_UNIX, um eine Unix-Socket-Verbindung anzugeben. Der zweite Parameter ist ein Socket-Typ, den Sie aus der folgenden Tabelle auswählen können. Verwenden Sie im Allgemeinen SOCK_STREAM, um das TCP-Protokoll zu verwenden, und das UDP-Protokoll, um SOCK_DGRAM zu verwenden. Der dritte Parameter gibt ein Protokoll an. Verwenden Sie SOL_TCP oder SOL_UDP, um den TCP- bzw. UDP-Protokollen zu entsprechen. Eine andere Möglichkeit besteht darin, dass Sie die Funktion getprotobyname verwenden können, um dies zu handhaben.
Beschreibung der Socket-Typkonstante
SOCK_DGRAM adressiert automatisch den Paket-Socket
SOCK_RAW RAW-Protokollschnittstelle
SOCK_RDM zuverlässiger Nachrichtenaustausch
SOCK_SEQPACKET sequenzieller Datenpaket-Socket
SOCK_STREAM-Stream-Socket
Ressource socket_create_listen(Integer-Port, Integer-Backlog)
Die Verwendung von socket_create_listen ist eine einfachere Methode als socket_create, um einen Socket zum Abhören zu generieren. Der generierte Socket überwacht den angegebenen Port und der optionale Parameter Backlog dient zum Festlegen der maximal zulässigen Anzahl von Verbindungen.
boolean socket_create_pair(Integer-Familie, Integer-Socket-Typ, Integer-Protokoll, Array-Handles)
Die Funktion socket_create_pair generiert ein Paar Socket-Verbindungen. Zunächst sind die ersten drei Parameter eine Beschreibung eines socket_create. Der handles-Parameter ist ein Array, das zwei Socket-Ressourcen enthält. Diese Funktion ist eine Kapselung der Socketpair-Funktion in C.
socket_create_pair
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("Sockets konnten nicht erstellt werden!n");
Ausfahrt();
}
$child = pcntl_fork();
if($child == -1){
print("Konnte nicht geforkt werden!n");
Ausfahrt();
}
elseif($child > 0){
//Elternteil
socket_close($socket[0]);
print("Parent: warte auf Nachrichtn");
$message = socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("Parent: got message--$messagen");
socket_write($socket[1], "Hallo, untergeordneter Prozess!n");
pcntl_waitpid($child, $status);
}anders{
//Kind
socket_close($socket[1]);
socket_write($socket[0], "Hallo, übergeordneter Prozess!n");
print("Kind: wartet auf Nachrichtn");
$message = socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("Child: got message--$messagen");
Ausgang(0);
}
?>
Wert socket_get_option(Ressourcen-Socket, Ganzzahlebene, Ganzzahloption)
Die Funktion socket_get_option gibt einen in der folgenden Tabelle aufgeführten Mehrwert zurück. Sie müssen eine von socket_create generierte Socket-Ressource und eine Ebene bereitstellen. Dieser erhaltene Socket-Level kann mit SOL_SOCKET ermittelt werden. Alternativ können Sie ein Protokoll wie SOL_TCP verwenden, um ein TCP-Protokoll darzustellen. Diese Optionen können durch socket_set_option festgelegt werden.
socket_get_options
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST: ' .
socket_get_option($socket, SOL_SOCKET,
SO_BROADCAST) . "<br>n");
print('SO_DEBUG: ' .
socket_get_option($socket, SOL_SOCKET,
SO_DEBUG) . "<br>n");
print('SO_DONTROUTE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) . "<br>n");
print('SO_ERROR: ' .
socket_get_option($socket, SOL_SOCKET,
SO_ERROR) . "<br>n");
print('SO_KEEPALIVE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n");
print('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER), TRUE) "<br>n");
print('SO_OOBINLINE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) . "<br>n");
print('SO_RCVBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) . "<br>n");
print('SO_RCVLOWAT: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) . "<br>n");
print('SO_RCVTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO), TRUE) "<br>n");
print('SO_REUSEADDR: ' .
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) . "<br>n");
print('SO_SNDBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) . "<br>n");
print('SO_SNDLOWAT: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) . "<br>n");
print('SO_SNDTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO), TRUE) "<br>n");
print('SO_TYPE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_TYPE) . "<br>n");
?>
Optionsbeschreibung der Socket-Optionstabelle
SO_BROADCAST ermöglicht automatisch adressierten Sockets das Senden und Empfangen von Broadcast-Paketen
SO_DEBUG aktiviert die Socket-Debugging-Funktion. Nur Root hat die Berechtigung, diese Option zu aktivieren.
SO_DONTROUTE akzeptiert keine Routing-Pakete über das Gateway
SO_ERROR Ruft den letzten Socket-Fehler ab und löscht ihn. Diese Option muss möglicherweise nicht festgelegt werden.
SO_KEEPALIVE Eine Nachricht öffnen, die aktiv bleibt
SO_LINGER Socket_colse und socket_shutdown brechen das Senden einer Nachricht ab. Diese Option verwendet ein Array, einschließlich der beiden Schlüssel l_onoff und l_linger.
SO_OOBINLINE fügt Daten direkt in den Empfangspuffer ein
SO_RCVBUF begrenzt die maximale Anzahl von Bytes, die gepuffert werden können
SO_RCVLOWAT verzögert sich durch die Annahme einer Mindestdatenmenge
SO_RCVTIMEO Verzögert die Meldung eines Akzeptanz-Timeouts mithilfe von zwei Schlüsseln des Arrays: sec und usec
SO_REUSEADDR ermöglicht die Wiederverwendung lokaler Adressen
SO_SNDBUF begrenzt die maximalen Bytes des Sendepuffers
SO_SNDLOWAT verzögert das Senden von Daten an dieses Protokoll und akzeptiert gleichzeitig ein Minimum an Bytes
SO_SNDTIMEO Verzögert die Meldung von Zeitüberschreitungsfehlern, wenn ein Absender eine Zeitüberschreitung überschreitet. Diese Option verwendet die Schlüssel des Arrays: sec und usec
SO_TYPE Ruft den Typ des Sockets ab. Diese Option muss möglicherweise nicht festgelegt werden.
boolescher Socket_getpeername(Ressourcensocket, Zeichenfolgenadresse, ganzzahliger Port).
socket_getpeername ruft die Adresse und den Port von einer angegebenen Verbindung ab. Handelt es sich bei der Verbindung um einen Unix-Socket, wird der Pfad zum Dateisystem zurückgegeben.
boolean socket_getsockname(Ressourcen-Socket, String-Adresse, Integer-Port)
socket_getsockname fügt einen Namen in den Socket ein und fügt die Adress- und Portparameter hinzu. Gibt bei einem Fehler „false“ zurück.
(Ich weiß nicht viel über die folgenden socket_iovec_*-Funktionen, daher wage ich es nicht, sie wahllos zu übersetzen, also behalte ich den Originaltext)
boolean socket_iovec_add(Ressourcen-Iovector, ganzzahlige Länge)
Die Funktion socket_iovec_add fügt dem Scatter/Gather-Array einen I/O-Vektor hinzu.
Ressource socket_iovec_alloc(integer count, …)
Die Funktion socket_iovec_alloc gibt eine Ressource zur Verarbeitung einer Sammlung von E/A-Vektoren zurück. Das erste Argument gibt die Anzahl der Vektoren an.
boolean socket_iovec_delete(Ressourcen-Iovector, ganzzahlige Position)
Die Funktion socket_iovec_delete entfernt den I/O-Vektor an der angegebenen Position.
string socket_iovec_fetch(Ressourcen-Iovector, ganzzahlige Position)
Die Funktion socket_iovec_fetch gibt den Wert des angegebenen Vektors in der I/O-Vektorressource zurück.
boolescher Wert socket_iovec_free(Ressource iovector)
Die Funktion socket_iovec_free gibt den für eine I/O-Vektorressource verwendeten Speicher frei.
boolean socket_iovec_set(Ressourcen-Iovector, Ganzzahlposition, Zeichenfolgenwert)
Das socket_iovec_set legt den Wert des I/O-Vektors an der angegebenen Position fest.
Ganzzahl socket_last_error(Ressourcen-Socket)
Die Funktion socket_last_error gibt den letzten Fehler zurück, der von einer Socket-Funktion in der Operation generiert wurde. Möglicherweise haben Sie in der obigen Funktion die Socket-Option der Socket-Ressource für die angegebene Verbindung festgelegt. In der folgenden Tabelle sind die zurückgegebenen Fehlercodes aufgeführt. Sie können auch die Funktion soclet_strerror verwenden, um detaillierte Fehler abzurufen. Verwenden Sie die Funktion socket_clear_error, um Socket-Fehler zu löschen.
Beschreibung der Socket-Fehlercodetabellenkonstante
SOCKET_E2BIG-Parameterliste zu lang
SOCKET_EACCES hat keine Berechtigung
Die SOCKET_EADDRINUSE-Adresse wird bereits verwendet
SOCKET_EADDRNOTAVAIL kann die angeforderte Adresse nicht auflösen
SOCKET_EADV-Broadcast-Fehler (Ankündigung).
SOCKET_EAFNOSUPPORT-Protokoll wird von der Adressfamilie nicht unterstützt
Die SOCKET_EAGAIN-Ressource ist vorübergehend nicht verfügbar
Der SOCKET_EALREADY-Vorgang wird bereits ausgeführt
SOCKET_EBADE Ungültiger Austausch
SOCKET_EBADF fehlerhafter Dateideskriptor
SOCKET_EBADFD-Dateideskriptor-Fehlerstatus
SOCKET_EBADMSG-Fehlermeldung
SOCKET_EBADR Ungültige Anforderungsbeschreibung
SOCKET_EBADRQC Ungültiger Anforderungscode
SOCKET_EBADSLT Ungültiger Vorgangsort
SOCKET_EBUSY Der Treiber oder die Ressource ist beschäftigt
SOCKET_ECHRNG-Kanalnummer außerhalb des gültigen Bereichs
SOCKET_ECOMM Kommunikationsfehler beim Senden
SOCKET_ECONNABORTED Verkehrsunterbrechung aus Softwaregründen
SOCKET_ECONNREFUSED-Verbindung abgelehnt
SOCKET_ECONNRESET Die Verbindung wird vom selben Socket zurückgesetzt
SOCKET_EDESTADDRREQ muss die Zieladresse erfordern
SOCKET_EDQUOT-Festplattenkontingent überschritten
Die SOCKET_EEXIST-Datei existiert bereits
SOCKET_EFAULT falsche Adresse
Der SOCKET_EHOSTDOWN-Host ist ausgefallen
SOCKET_EHOSTUNREACH wird nicht an den Host weitergeleitet
SOCKET_EIDRM zeigt an, dass die ID gelöscht wurde
Der SOCKET_EINPROGRESS-Vorgang wird ausgeführt
SOCKET_EINTR-Systemaufruf blockiert
SOCKET_EINVAL ungültiger Parameter
SOCKET_EIO-Eingabe-/Ausgabefehler
Das Übertragungsterminal SOCKET_EISCONN wurde angeschlossen
SOCKET_EISDIR ist ein Verzeichnis
SOCKET_EISNAM ist eine angegebene Typdatei
SOCKET_EL2HLT Level 2 abgebrochen
SOCKET_EL2NSYNC Level 2 nicht synchron
SOCKET_EL3HLT Level 3 abgebrochen
SOCKET_EL3RST Level 3 wird zurückgesetzt
Die SOCKET_ELNRNG-Verbindungsnummer liegt außerhalb des gültigen Bereichs
SOCKET_ELOOP Zu viele Ebenen symbolischer Links
SOCKET_EMEDIUMTYPE Falscher Medientyp (Zwischentyp)
SOCKET_EMFILE Zu viele geöffnete Dateien
SOCKET_EMLINK Zu viele Verbindungen
Die SOCKET_EMSGSIZE-Nachricht ist zu lang
SOCKET_EMULTIHOP Zu viele Versuche
SOCKET_ENAMETOOLONG Dateiname zu lang
Das SOCKET_ENETDOWN-Netzwerk ist ausgefallen
SOCKET_ENETRESET Das Netzwerk wurde unterbrochen und die Verbindung wurde zurückgesetzt.
SOCKET_ENETUNREACHDas Netzwerk ist nicht erreichbar
SOCKET_ENFILE Zu viele offene Dateien im System
SOCKET_ENOANO Kein Pluspol
SOCKET_ENOBUFS Kein Cache-Speicherplatz verfügbar
SOCKET_ENOCSI Keine CSI-Struktur verfügbar
SOCKET_ENODATA Keine Daten verfügbar
SOCKET_ENODEV Kein solcher Treiber
SOCKET_ENOENT Keine solche Datei oder kein solches Verzeichnis
SOCKET_ENOLCK Keine Datensatzsperre verfügbar
SOCKET_ENOLINK-Verbindung zu einem vorhandenen Dienst
SOCKET_ENOMEDIUM Kein Medium gefunden
SOCKET_ENOMEM kann keinen Speicher zuweisen
SOCKET_ENOMSG Kein angegebener Nachrichtentyp
Das SOCKET_ENONET-Gerät ist nicht im Netzwerk
Das SOCKET_ENOPROTOOPT-Protokoll ist nicht verfügbar
SOCKET_ENOSPC Kein Platz im Laufwerk
SOCKET_ENOSR hat die Stream-Ressource überschritten
Der SOCKET_ENOSTR-Treiber ist kein Stream
SOCKET_ENOSYS-Funktion wird nicht ausgeführt
SOCKET_ENOTBLK-Blocktreiber ist erforderlich
SOCKET_ENOTCONN Das Übertragungsterminal ist nicht verbunden
SOCKET_ENOTDIR hat kein Verzeichnis
Das Verzeichnis SOCKET_ENOTEMPTY ist leer
SOCKET_ENOTSOCK Socket-Operation auf einem Nicht-Socket
SOCKET_ENOTTY Inkompatibler IO-Controller
Der SOCKET_ENOTUNIQ-Name ist im Netzwerk nicht eindeutig
SOCKET_ENXIO Kein solcher Treiber oder keine solche Adresse
Der SOCKET_EOPNOTSUPP-Vorgang wird nicht unterstützt
SOCKET_EPERM-Vorgang nicht zulässig
SOCKET_EPFNOSUPPORT Protokollfamilie wird nicht unterstützt
SOCKET_EPIPE-Pipe ist fehlgeschlagen
SOCKET_EPROTO-Protokollfehler
Das SOCKET_EPROTONOSUPPORT-Protokoll wird nicht unterstützt
SOCKET_EPROTOTYPE Der Typ des Protokollfehlers auf dem Socket
Die Remote-Adresse von SOCKET_EREMCHG hat sich geändert
Das SOCKET_EREMOTE-Objekt ist remote
SOCKET_EREMOTEIO Remote-E/A-Fehler
SOCKET_ERESTART Der unterbrochene Systemaufruf wird neu gestartet
Das SOCKET_EROFS-Dateisystem ist schreibgeschützt
SOCKET_ESHUTDOWN. Übertragungsendpunkt-Interrupt kann nicht gesendet werden
SOCKET_ESOCKTNOSUPPORT Socket-Typ wird nicht unterstützt
SOCKET_ESPIPE illegale Suche
SOCKET_ESTRPIPE Stream-Pipe-Fehler
Der SOCKET_ETIME-Timer ist abgelaufen
SOCKET_ETIMEDOUT-Verbindungszeitüberschreitung
SOCKET_ETOOMANYREFS Zu viele Verbindungen zum Kombinieren
SOCKET_EUNATCH Protokolltreiber konnte nicht angeschlossen werden
SOCKET_EUSERS Zu viele Benutzer
Die SOCKET_EWOULDBLOCK-Ressource ist vorübergehend nicht verfügbar
SOCKET_EXDEV Ungültige laufwerksübergreifende Verbindung
SOCKET_EXFULL-Austausch ist vollständig
boolean socket_listen(Ressourcen-Socket, Ganzzahl-Rückstand)
Diese socket_listen-Funktion wartet auf Verbindungen vom Client. Der Backlog-Parameter legt die maximale Anzahl von Warteschlangen fest, die auf Verbindungen warten dürfen.
string socket_read(Ressourcen-Socket, Ganzzahllänge, Ganzzahltyp)
Die Funktion socket_read liest die angegebenen Bytes von einem bestimmten Socket und gibt false zurück, wenn ein Fehler vorliegt. Standardmäßig wird der binärsichere Lesemodus verwendet. Sie können den Lesemodus ändern, indem Sie den Typparameter extern auf PHP_BINARY_READ setzen. Sie können den Typ auch auf PHP_NORMAL_READ setzen.
boolean socket_readv(Ressourcen-Socket, Ressourcen-Iovector)
Die Funktion socket_readv fügt die gelesenen Daten in die Ressource iovector ein.
integer socket_recv(Ressourcen-Socket, String-Puffer, Integer-Länge, Integer-Flags)
Die Funktion socket_recv liest Daten und fügt sie in den Puffer ein. Der Längenparameter legt die maximale Anzahl der zu lesenden Bytes fest und der Flag-Parameter kann MSG_OOB oder MSG_PEEK verwenden. Die Funktion gibt die Anzahl der gelesenen Bytes zurück.
integer socket_recvfrom(Ressourcen-Socket, String-Puffer, Integer-Länge, String-Host, Integer-Port)
Die Funktion socket_frcvfrom liest Daten und fügt sie in den Cache ein. Der Parameter „Länge“ legt die maximale Anzahl der Bytes fest, die empfangen werden dürfen. Der Flags-Parameter kann auf MSG_OOB oder MSG_PEEK gesetzt werden. PHP setzt die Host- und Port-Parameter auf geeignete Werte, um vom Host gesendete Daten erhalten zu können.
boolean socket_recvmsg(Ressourcen-Socket, Ressourcen-Iovector, Array-Steuerung, Ganzzahllänge, Ganzzahl-Flags, String-Host, Ganzzahl-Port)
Die Funktion socket_recvmsg liest Daten aus dem Socket und fügt sie in eine I/O-Vektorressource ein. Der PHP-Einstellungssteuerungsparameter ist ein assoziatives Array mit drei Elementen: cmsg_level, cmsg_type und cmsg_data. Der Längenparameter ist ein an die Daten angehängter Längenparameter zum Abrufen der Daten. Der Flags-Parameter legt die zulässigen Werte und Rückgabewerte fest. Zum Zeitpunkt des Schreibens kann PHP nicht alle Ausgabekonstanten ausführen. PHP setzt die Host- und Port-Parameter auf geeignete Werte, um vom Remote-Host gesendete Daten zu erhalten.
(Die Funktion Socket_slect ist nicht übersetzt, da ich befürchte, dass die Wörter nicht die Bedeutung vermitteln.)
Ganzzahl socket_select(Array-Lesen, Array-Schreiben, Array-Ausnahme, Ganzzahl-Timeout_Sekunden, Ganzzahl-Timeout_Mikrosekunden)
Die socket_select-Funktion wartet auf Änderungen an Sockets. PHP überwacht die im Lesearray angegebenen Sockets auf eingehende Daten. PHP überwacht die im Schreibarray angegebenen Streams, um sicherzustellen, dass sie bereit sind, weitere Daten zu akzeptieren für Fehler. Wenn die im Argument „timeout_seconds“ angegebene Anzahl an Sekunden verstrichen ist, gibt die Funktion das optionale Argument „timeout_microseconds“ zurück, um eine Zeitüberschreitung von weniger als 1 Sekunde anzugeben.
Die Funktion socket_select gibt die Anzahl der geänderten Sockets zurück oder FALSE, wenn ein Fehler aufgetreten ist. Außerdem werden die angegebenen Arrays so geändert, dass sie nur die geänderten Sockets enthalten.
Wenn Sie keine Sockets eines bestimmten Typs überwachen müssen, können Sie ein leeres Array oder eine auf NULL gesetzte Variable übergeben.
integer socket_send(Ressourcen-Socket, String-Puffer, Integer-Länge, Integer-Flags)
Die Funktion socket_send schreibt Daten in den Puffer und fügt sie dann in die Verbindung ein. Sie müssen eine maximale Anzahl beschreibbarer Bytes für den Puffer angeben. Sie können den Flags-Parameter auch auf leer oder auf eine der folgenden kombinierten Konstanten setzen: MSG_DONTROUTE und MSG_OOB. Die Funktion endet und gibt die Anzahl der geschriebenen Bytes zurück, andernfalls gibt sie false zurück.
boolean socket_sendmsg(Ressourcen-Socket, Ressourcen-Iovector, Integer-Flags, String-Adresse, Integer-Port)
socket_sendmsg versucht, Daten an einen Socket zu senden. Es ist für anschlusslose Steckdosen geeignet. Der Iovector-Parameter ist eine Ressource, die von der Funktion socket_iovec_alloc generiert wird. Sie müssen den Flags-Parameter als NULL, MSG_DONTROUTE, MSG_OOB oder zwei kombinierte Konstanten angeben. Für Internetanfragen sollten Sie eine Adresse und einen Port angeben.
Die Funktion Socket_sendmsg gibt beim Senden von Daten true zurück, es gibt jedoch keine Garantie dafür, dass die Daten ankommen.
integer socket_sendto(Ressourcen-Socket, String-Puffer, Integer-Länge, Integer-Flags, String-Adresse, Integer-Port)
Die Funktion socket_sendto versucht, Daten in den Puffer zu schreiben und an einen Socket zu senden. Es ist für die meisten anschlusslosen Steckdosen geeignet. Sie müssen Flags angeben als: NULL, MSG_DONTROUTE, MSG_OOB oder eine Kombination aus zwei Konstanten. Außerdem sollten Sie die Adresse und einen gewünschten Port angeben.
Die Funktion Socket_sendto gibt „true“ zurück, wenn Daten gesendet werden, es gibt jedoch keine Garantie dafür, dass die Daten ankommen.
boolean socket_set_block(Ressourcen-Socket)
Die Funktion socket_set_block versetzt den Socket in einen Blockmodus, der der Standardmodus ist. Im Blockmodus werden E/A-Vorgänge für eine abgeschlossene Anfrage ausgeführt.
boolescher Wert socket_set_nonblock(Ressourcen-Socket)
Die Funktion socket_set_nonblock legt fest, dass der Socket in einen beliebigen Nicht-Block-Modus eingefügt werden soll. Im Nicht-Block-Modus kehren E/A-Vorgänge sofort zurück, auch wenn keine Daten vorhanden sind.
boolean socket_set_option(Ressourcen-Socket, Ganzzahlebene, Ganzzahloption, Ganzzahlwert)
Die Funktion socket_set_option legt eine Option für den Socket fest. Der Level-Parameter legt eine Konstante fest, die die Ebene kennzeichnet. Zu den gültigen Werten gehören: SOL_SOCKET, SOL_TCP und SOL_UDP. Die Optionsparameter müssen mit den Konstanten in der Tabelle der Socket-Optionen oben übereinstimmen.
boolean socket_shutdown(Ressourcen-Socket, Ganzzahl wie)
Die Funktion socket_shutdown schließt einen Socket für E/A. Wenn Sie how auf 0 setzen, wird der Datenempfang gestoppt, wenn Sie es auf 1 setzen, wird das Senden von Daten gestoppt, und wenn Sie es auf 2 setzen, werden beide Vorgänge gestoppt.
string socket_strerror(integer error)
Die Funktion socket_strerror gibt eine Fehlernummer und detaillierte Fehlerinformationen zurück.
integer socket_write(Ressourcen-Socket, String-Puffer, Integer-Länge)
Die Funktion socket_write schreibt Daten in den Puffer und gibt sie dann an den Socket aus. Sie können den Längenparameter angeben, um die maximale Anzahl von Bytes im Puffer anzugeben. Diese Funktion ist normalerweise praktischer als socket_send.
boolean socket_writev(Ressourcen-Socket, Ressourcen-Iovector)
Die Funktion socket_writev schreibt Daten über E/A-Vektoren in einen Socket.