Signatur
Beschreibung
stream_socket_get_name() ermöglicht es, die Netzwerkadresse (IP-Adresse und Port) eines Socket-Streams abzufragen – entweder die lokale Seite der Verbindung oder die Gegenstelle (Remote Peer). Das ist besonders nützlich, um nach dem Aufbau einer Verbindung herauszufinden, welche Adresse und welcher Port tatsächlich verwendet werden, beispielsweise wenn der Betriebssystem-Kernel beim Binden an Port 0 automatisch einen freien Port vergeben hat.
Der Parameter want_peer steuert, ob die lokale Adresse (false) oder die Adresse der Gegenstelle (false = lokal, true = remote) zurückgegeben wird. Bei Server-Sockets, die mit stream_socket_server() erzeugt wurden, liefert want_peer = false die Adresse, an die der Server gebunden ist. Bei Client-Verbindungen über stream_socket_accept() gibt want_peer = true die Adresse des verbundenen Clients zurück.
Die Funktion ist hilfreich beim Debuggen, beim Logging von Verbindungen sowie in Situationen, in denen der Code dynamisch mit Ports oder Adressen umgehen muss, die erst zur Laufzeit bekannt sind. Sie funktioniert mit allen Stream-Ressourcen, die über stream_socket_client(), stream_socket_server() oder stream_socket_accept() erzeugt wurden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $socket Pflicht | resource | Eine Socket-Stream-Ressource, wie sie von stream_socket_client(), stream_socket_server() oder stream_socket_accept() zurückgegeben wird. |
|
| $want_peer Pflicht | bool | Gibt an, welche Adresse abgefragt werden soll: false für die lokale Adresse des Sockets, true für die Adresse der Gegenstelle (Remote Peer). |
Rückgabewert
ip:port (z. B. 127.0.0.1:8080) zurück. Bei IPv6-Adressen lautet das Format [::1]:8080. Im Fehlerfall wird false zurückgegeben.Beispiele
Lokale und Remote-Adresse eines Server-Sockets ermitteln
<?php
// Server-Socket auf einem zufälligen Port erstellen (Port 0)
$server = stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr);
if (!$server) {
die("Server-Fehler: $errstr ($errno)\n");
}
// Tatsächlich zugewiesene lokale Adresse ermitteln
$localName = stream_socket_get_name($server, false);
echo "Server lauscht auf: $localName\n";
// Ausgabe z. B.: Server lauscht auf: 127.0.0.1:54321
fclose($server);
Adresse des verbundenen Clients bei einer angenommenen Verbindung ausgeben
<?php
$server = stream_socket_server('tcp://0.0.0.0:9000', $errno, $errstr);
if (!$server) {
die("Fehler: $errstr ($errno)\n");
}
echo "Warte auf Verbindungen auf: " . stream_socket_get_name($server, false) . "\n";
// Auf eine eingehende Verbindung warten (blockierend)
$client = stream_socket_accept($server, 30);
if ($client) {
$peerName = stream_socket_get_name($client, true); // Remote-Adresse
$localName = stream_socket_get_name($client, false); // Lokale Adresse
echo "Verbindung von: $peerName\n";
echo "Lokale Seite: $localName\n";
fwrite($client, "Willkommen!\n");
fclose($client);
}
fclose($server);
// Wichtig · Fallstricke
Wichtig: Wird die Funktion auf einem UDP-Socket aufgerufen, der noch keine Verbindung hat, kann want_peer = true zu false oder einer leeren Adresse führen, da bei UDP keine feste Verbindung zur Gegenstelle besteht.
Bei IPv6-Adressen wird die IP-Adresse in eckige Klammern eingeschlossen, z. B. [::1]:8080. Code, der die Adresse parst, sollte diesen Fall berücksichtigen.
Die Funktion gibt false zurück, wenn der übergebene Stream keine Socket-Ressource ist oder wenn die Adresse aus einem anderen Grund nicht ermittelt werden kann. Es empfiehlt sich daher, den Rückgabewert zu prüfen.