socket_recv
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recv — Empfängt Daten von einem verbundenen Socket
Beschreibung
data wird als Referenz übergeben, daher muss er als
Variable in der Liste der Argumente angegeben werden. Gelesene Daten von
socket durch socket_recv() werden
in data zurückgegeben.
Parameter-Liste
socket
-
Der socket muss eine
Socket-Instanz sein, die zuvor mit
socket_create() erzeugt wurde.
data
-
Empfangene Daten werden in die Variable geschrieben, die durch
data spezifiziert ist. Tritt ein Fehler auf, wird
die Verbindung zurückgesetzt oder, wenn keine Daten verfügbar sind, wird
data auf null gesetzt.
length
-
Maximal length Bytes werden von dem entfernten
System abgerufen.
flags
-
Der Wert von flags kann jede beliebige
Kombination der folgenden Flags sein, verknüpft mit dem binären ODER-
(|) Operator.
Mögliche Werte von flags
| Flag |
Beschreibung |
MSG_OOB |
Verarbeite bandexterne (out-of-band) Daten.
|
MSG_PEEK |
Lies Daten ab Anfang der Empfangs-Warteschlange, ohne die Daten
aus der Warteschlange zu löschen.
|
MSG_WAITALL |
Blockiere so lange, bis mindestens length
Daten gelesen wurden. Wenn jedoch ein Signal empfangen wurde oder
der entfernte Host die Verbindung beendet, kann die Funktion auch
weniger Daten zurückgeben.
|
MSG_DONTWAIT |
Wenn dieses Flag gesetzt ist, kehrt die Funktion zurück, auch wenn
sie normalerweise blockieren würde.
|
Rückgabewerte
socket_recv() gibt die Anzahl der empfangenen Bytes
zurück oder false, falls ein Fehler auftrat. Der aktuelle Fehlercode kann
mit socket_last_error() abgefragt werden. Dieser
Fehlercode kann an die Funktion socket_strerror()
übergeben werden, um eine textuelle Beschreibung des Fehlers zu erhalten.
Beispiele
Beispiel #1 socket_recv()-Beispiel
Dies ist eine einfache Umformulierung des ersten Beispiels
von Beispiele unter Nutzung von
socket_recv().
<?php
error_reporting(E_ALL);
echo "<h2>TCP/IP-Verbindung</h2>\n";
/* Erhalte Port für den WWW-Service. */
$service_port = getservbyname('www', 'tcp');
/* Erhalte die IP-Adresse des Ziel Hosts. */
$address = gethostbyname('www.example.com');
/* Erzeuge ein TCP/IP-Socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() schlug fehl: Grund: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Versuche Verbing zu '$address' auf Port '$service_port' aufzubauen...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() schulg fehl.\nGrund: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';
echo "Sende HTTP HEAD Request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Lese Response:\n\n";
$buf = 'Dies ist mein Puffer.';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "Las $bytes bytes von socket_recv(). Schliesse Socket...";
} else {
echo "socket_recv() schlug fehl; Grund: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);
echo $buf . "\n";
echo "OK.\n\n";
?>
Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:
<h2>TCP/IP-Verbindung</h2>
OK.
Versuche Verbing zu '208.77.188.166' auf Port '80' aufzubauen...OK.
Sende HTTP HEAD Request...OK.
Lese Response:
Las 123 bytes von socket_recv(). Schliesse Socket...HTTP/1.1 200 OK
Date: Mon, 14 Sep 2009 08:56:36 GMT
Server: Apache/2.2.3 (Red Hat)
Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
ETag: "b80f4-1b6-80bfd280"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
OK.