Ce face stream_socket_get_name
stream_socket_get_name($s, false) returnează adresa locală a socket-ului: pe ce IP și port ascultă serverul sau de pe ce port a plecat conexiunea clientului. Cu true returnează adresa celuilalt capăt.
Cel mai des se folosește după stream_socket_server("tcp://127.0.0.1:0"), ca să afli ce port liber a ales sistemul.
Parametri
| Parametru | Descriere |
|---|---|
$socket |
Socket-ul verificat. |
$remote |
false pentru adresa locală, true pentru adresa celuilalt capăt. |
Ce returnează
Adresa ca text ip:port sau false dacă nu există (de exemplu la socket-urile fără adresă).
Exemple
Exemplul 1: Cele două capete ale unei conexiuni
Adresa locală a clientului este adresa de la distanță văzută de server, și invers.
<?php
$server = stream_socket_server("tcp://127.0.0.1:0");
$client = stream_socket_client("tcp://" . stream_socket_get_name($server, false));
$conexiune = stream_socket_accept($server);
var_dump(stream_socket_get_name($client, false) === stream_socket_get_name($conexiune, true));
var_dump(stream_socket_get_name($client, true) === stream_socket_get_name($conexiune, false));
echo "IP client: " . explode(":", stream_socket_get_name($client, false))[0];
Rezultat
bool(true)
bool(true)
IP client: 127.0.0.1
Exemplul 2: Socket fără adresă
Socket-urile create cu stream_socket_pair nu au adresă de rețea.
<?php
[$a, $b] = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
var_dump(stream_socket_get_name($a, false));
Rezultat
bool(false)
Greșeli frecvente
- Desparți adresa cu
explode(":", ...)pentru IPv6. O adresă ca::1:8000conține mai multe:. Ia portul custrrchrsausubstr($adr, strrpos($adr, ":") + 1).
Comenzi înrudite
stream_socket_server: Creează un socket de server care ascultă pe o adresă și un port, pentru conexiuni primite cu stream_socket_accept.stream_socket_accept: Așteaptă și acceptă o conexiune nouă pe un socket de server; returnează stream-ul pentru acel client.stream_socket_client: Deschide o conexiune către un server dată ca adresă completă (tcp://, udp://, tls://, unix://) și o returnează ca stream.