socket_getpeername

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_getpeernameОпрашивает удалённую сторону сокета

Описание

socket_getpeername(Socket $socket, string &$address, int &$port = null): bool

Функция отправляет запрос удалённой стороне заданного сокета, которая возвращает либо хост и порт, либо путь в файловой системе Unix, в зависимости от типа сокета.

Список параметров

socket

Экземпляр Socket, который создали функциями socket_create() или socket_accept().

address

Если тип сокета относится к семейству IPv4-адресов AF_INET или IPv6-адресов AF_INET6: функция socket_getpeername() заполнит параметр address значением IP-адреса однорангового (удалённого) узла в нотации, которая соответствует версии протокола — 127.0.0.1 или fe80::1. Функция также вернёт связанный с адресом порт, если указали необязательный параметр port.

Если тип сокета относится к семейству адресов файловой системы Unix AF_UNIX: функция socket_getpeername() заполнит параметр address значением пути в файловой системе Unix. Например: /var/run/daemon.sock.

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() возвращает осмысленное значение только для тех сокетов, для которых концепция «одноранговых отношений» имеет смысл.

Смотрите также

  • socket_getsockname() - Запрашивает локальную сторону указанного сокета, в результате можно получить хост/порт или путь в файловой системе Unix, в зависимости от типа сокета
  • socket_last_error() - Возвращает последнюю ошибку сокета
  • socket_strerror() - Возвращает строку, описывающую ошибку сокета

Добавить

Примечания пользователей 2 notes

up
6
redph0enix at hotmail dot com
21 years ago
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";
up
2
Anonymous
8 years ago
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.
To Top