The reason it won't work for UDP is that UDP is stateless; logically there are no peers other than at the time a packet is sent or received. Or more strictly, a UDP socket can interact with 0..N peers.
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_getpeername — Pregunta a la parte remota del socket dado que puede resultar en un host/puerto o en una ruta de sistema de archivos Unix, dependiendo de su tipo
Pregunta a la parte remota del socket dado que puede resultar en un host/puerto o en una ruta de sistema de archivos Unix, dependiendo de su tipo.
socket
Un recurso socket válido creado con socket_create() o socket_accept().
address
Si el socket dado es de tipo AF_INET
o
AF_INET6
, socket_getpeername()
devolverá la dirección IP de los pares (remotos) en
la notación apropiada (p.ej. 127.0.0.1
o
fe80::1
) en el parámetro address
,
y si el parámetro opcional port
está
presente, también el puerto asociado.
Si el socket dado es de tipo AF_UNIX
,
socket_getpeername() devolverá la ruta del sistema de archivos
Unix (p.ej. /var/run/daemon.sock
) en el
parámetro address
.
port
Si se da, contendrá el puerto asociado a
address
.
Devuelve true
en caso de éxito o false
en caso de error. socket_getpeername() puede también devolver
false
si el tipo de socket no es ni AF_INET
,
AF_INET6
, ni AF_UNIX
, en cuyo
caso no se actualiza el último código de error de socket.
Nota:
socket_getpeername() no debería usarse con sockets
AF_UNIX
creados con socket_accept(). Sólo los sockets creados con socket_connect() o un socket principal de servidor seguido de una llamada a socket_bind() devolverán valores con sentido.
Nota:
Para hacer que socket_getpeername() devuelva un valor con sentido, el socket sobre el que es aplicado debe ser, por supuesto, uno cuyo concepto de "par" tenga sentido.
The reason it won't work for UDP is that UDP is stateless; logically there are no peers other than at the time a packet is sent or received. Or more strictly, a UDP socket can interact with 0..N peers.
socket_getpeername will not work for UDP sockets. Instead, use socket_recvfrom - it provides the IP address and port of the source server - eg:
$size=socket_recvfrom($socket,$input,65535,0,$ipaddress,$port);
echo "Received [$input] ($size bytes) from IP $ipaddress Port $port\n";