Start · Sprachen · PHP · Referenz · socket_setopt

socket_setopt

Funktion

Alias von <code>socket_set_option()</code> — setzt eine Option auf einem Socket.

seit PHP 4.3.0 Kategorie: http

Signatur

socket_setopt(Socket $socket, int $level, int $option, mixed $value): bool

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

Typ
bool
Beschreibung
Gibt 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);
SO_REUSEADDR erfolgreich gesetzt.

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);
Empfangs-Timeout auf 5 Sekunden gesetzt.

// 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.