Signatur
Beschreibung
socket_setopt() ist ein Alias der Funktion socket_set_option() und verhält sich identisch zu dieser. Sie setzt eine Socket-Option auf dem angegebenen Socket-Objekt. Socket-Optionen steuern das Verhalten des Sockets auf Protokoll- oder Betriebssystemebene, z. B. Timeout-Werte, Wiederverwendung von Adressen oder Puffergrößen.
Der Parameter level bestimmt die Protokollebene, auf der die Option gesetzt wird. Häufig verwendete Werte sind SOL_SOCKET für allgemeine Socket-Optionen, SOL_TCP für TCP-spezifische Optionen oder eine konkrete Protokollnummer (z. B. via getprotobyname()). Der Parameter option gibt die zu setzende Option an (z. B. SO_REUSEADDR, SO_RCVTIMEO).
Da es sich um einen Alias handelt, sollte in neuem Code bevorzugt socket_set_option() verwendet werden. socket_setopt() ist jedoch in allen PHP-Versionen verfügbar, die socket_set_option() unterstützen, und verhält sich identisch.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $socket Pflicht | Socket | Ein gültiges Socket-Objekt, das mit socket_create() oder socket_accept() erzeugt wurde. |
|
| $level Pflicht | int | Die Protokollebene, auf der die Option gesetzt wird. Z. B. SOL_SOCKET für allgemeine Socket-Optionen oder SOL_TCP für TCP-Optionen. |
|
| $option Pflicht | int | Die zu setzende Socket-Option, z. B. SO_REUSEADDR, SO_KEEPALIVE, SO_RCVTIMEO oder SO_SNDTIMEO. |
|
| $value Pflicht | mixed | Der Wert der Option. Je nach Option ein int oder ein assoziatives Array (z. B. ['sec' => 5, 'usec' => 0] für Timeout-Optionen). |
Rückgabewert
true bei Erfolg zurück. Im Fehlerfall wird false zurückgegeben und der Fehler kann mit socket_last_error() abgerufen werden.Beispiele
Adresse wiederverwenden (SO_REUSEADDR)
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die('socket_create() fehlgeschlagen: ' . socket_strerror(socket_last_error()));
}
// SO_REUSEADDR setzen, damit der Port nach einem Neustart sofort wieder nutzbar ist
$result = socket_setopt($socket, SOL_SOCKET, SO_REUSEADDR, 1);
if ($result === false) {
die('socket_setopt() fehlgeschlagen: ' . socket_strerror(socket_last_error($socket)));
}
echo 'SO_REUSEADDR erfolgreich gesetzt.' . PHP_EOL;
socket_close($socket);
Empfangs-Timeout setzen (SO_RCVTIMEO)
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die('socket_create() fehlgeschlagen: ' . socket_strerror(socket_last_error()));
}
// Empfangs-Timeout auf 5 Sekunden setzen
$timeout = ['sec' => 5, 'usec' => 0];
$result = socket_setopt($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout);
if ($result === false) {
die('socket_setopt() fehlgeschlagen: ' . socket_strerror(socket_last_error($socket)));
}
echo 'Empfangs-Timeout auf 5 Sekunden gesetzt.' . PHP_EOL;
socket_close($socket);
// Wichtig · Fallstricke
Alias: socket_setopt() ist ein Alias von socket_set_option(). In neuem Code sollte bevorzugt socket_set_option() verwendet werden, da Aliase in zukünftigen PHP-Versionen potenziell entfernt werden könnten.
Fehlerbehandlung: Bei einem Fehler gibt die Funktion false zurück. Der genaue Fehlercode lässt sich mit socket_last_error($socket) und eine lesbare Fehlermeldung mit socket_strerror() ermitteln.
Betriebssystemabhängigkeit: Nicht alle Socket-Optionen sind auf allen Betriebssystemen verfügbar. Windows unterstützt z. B. einige UNIX-spezifische Optionen nicht.