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 — Запрашивает удалённую сторону указанного сокета, в результате может быть возвращён хост/порт или путь в файловой системе Unix, в зависимости от типа сокета
Запрашивает удалённую сторону указанного сокета, в результате может быть возвращён хост/порт или путь в файловой системе Unix, в зависимости от типа сокета.
socket
Экземпляр Socket, созданный при помощи функции socket_create() или socket_accept().
address
Если заданный сокет имеет тип AF_INET
или
AF_INET6
, socket_getpeername()
вернёт удалённый IP-адрес в соответствующем формате (
например, 127.0.0.1
или fe80::1
) в параметре
address
и, если необязательный параметр
port
присутствует, также связанный порт.
Если заданный сокет имеет тип AF_UNIX
,
socket_getpeername() вернёт путь в файловой системе Unix
(т.е. /var/run/daemon.sock
) в параметр
address
.
port
Если указан, то будет содержать порт, связанный с адресом
address
.
Функция возвращает true
в случае успешного выполнения или false
, если возникла ошибка. socket_getpeername() также может вернуть
false
, если сокет иметь тип отличный от AF_INET
,
AF_INET6
или AF_UNIX
, в этом случае
код последней ошибки сокета НЕ будет обновлён.
Версия | Описание |
---|---|
8.0.0 |
socket теперь экземпляр класса Socket;
ранее был ресурсом (resource).
|
Замечание:
socket_getpeername() не должна быть использована с сокетами
AF_UNIX
, созданными при помощи функции socket_accept(). Только сокеты, созданные при помощи socket_connect() или серверный сокет, к которому применён вызов функции socket_bind(), будут возвращать осмысленные значения.
Замечание:
Для того, чтобы socket_getpeername() вернула осмысленное значение, сокет, к которому она применяется, должен понимать концепцию "равных отношений" (peer).
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";