Signatur
Beschreibung
socket_set_timeout() ist ein Alias der Funktion stream_set_timeout() und setzt das maximale Wartezeitraum (Timeout) für Lese- und Schreiboperationen auf einem gegebenen Stream. Das Timeout wird als Kombination aus Sekunden ($seconds) und Mikrosekunden ($microseconds) angegeben.
Typischerweise wird diese Funktion bei Netzwerk-Streams eingesetzt, zum Beispiel bei Verbindungen, die über fsockopen() oder stream_socket_client() geöffnet wurden. Läuft das Timeout ab, ohne dass die Operation abgeschlossen werden konnte, schlägt die nächste Lese-/Schreiboperation fehl und stream_get_meta_data() gibt timed_out als true zurück.
Da es sich um einen offiziellen Alias handelt, verhält sich socket_set_timeout() identisch zu stream_set_timeout(). Für neuen Code wird empfohlen, direkt stream_set_timeout() zu verwenden, da Alias-Funktionen in zukünftigen PHP-Versionen potenziell entfernt werden könnten.
Diese Funktion ist nicht für Sockets aus der socket_*()-Erweiterung (ext/sockets) gedacht. Für jene gibt es socket_set_option() mit den Optionen SO_RCVTIMEO und SO_SNDTIMEO.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stream Pflicht | resource | Der Stream, für den das Timeout gesetzt werden soll. Typischerweise eine Ressource, die von fsockopen(), fopen() oder stream_socket_client() zurückgegeben wurde. |
|
| $seconds Pflicht | int | Der Sekunden-Anteil des Timeouts. Zusammen mit $microseconds ergibt sich die gesamte Wartezeit. |
|
| $microseconds | int | 0 | Der Mikrosekunden-Anteil des Timeouts (0–999999). Wird zu $seconds addiert. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn $stream keine gültige Stream-Ressource ist).Beispiele
HTTP-Anfrage mit Timeout über fsockopen
<?php
$host = 'example.com';
$fp = fsockopen($host, 80, $errno, $errstr, 5);
if (!$fp) {
echo "Verbindung fehlgeschlagen: $errstr ($errno)\n";
exit;
}
// Timeout auf 3 Sekunden setzen
socket_set_timeout($fp, 3);
fputs($fp, "GET / HTTP/1.0\r\nHost: $host\r\nConnection: Close\r\n\r\n");
$response = '';
while (!feof($fp)) {
$response .= fgets($fp, 128);
$info = stream_get_meta_data($fp);
if ($info['timed_out']) {
echo "Timeout aufgetreten!\n";
break;
}
}
fclose($fp);
echo substr($response, 0, 200);
?>
Timeout mit Sekunden- und Mikrosekunden-Anteil
<?php
// Verbindung zu einem lokalen Service
$fp = fsockopen('127.0.0.1', 9000, $errno, $errstr, 2);
if (!$fp) {
echo "Fehler: $errstr ($errno)\n";
exit;
}
// Timeout auf 1,5 Sekunden setzen (1 Sekunde + 500.000 Mikrosekunden)
$result = socket_set_timeout($fp, 1, 500000);
echo $result ? "Timeout erfolgreich gesetzt." : "Fehler beim Setzen des Timeouts.";
fclose($fp);
?>
// Wichtig · Fallstricke
Alias-Hinweis: socket_set_timeout() ist ein Alias von stream_set_timeout(). Für neuen Code sollte bevorzugt stream_set_timeout() verwendet werden.
Achtung: Diese Funktion gilt nur für Stream-Ressourcen (z. B. aus fsockopen()). Für Sockets aus der socket_*()-Erweiterung (z. B. socket_create()) muss stattdessen socket_set_option() mit SO_RCVTIMEO/SO_SNDTIMEO verwendet werden.
Das Timeout betrifft nicht die initiale Verbindungsherstellung – dafür ist der $timeout-Parameter von fsockopen() zuständig. Nach einem abgelaufenen Timeout sollte stream_get_meta_data() geprüft werden, um den genauen Grund für das Ende eines Streams zu ermitteln.