table of contents
GETPEERNAME(2) | Руководство программиста Linux | GETPEERNAME(2) |
ИМЯ¶
getpeername - получает имя подключившегося сокета
ОБЗОР¶
#include <sys/socket.h>
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
ОПИСАНИЕ¶
getpeername() возвращает адрес машины, подключившейся к сокету sockfd, в буфер, указанный addr. В параметре addrlen должно быть указано, сколько места выделено, на которое указывает addr. По возвращении он содержит реальный размер памяти, занимаемый возвращаемым именем (в байтах). Имя обрезается, если буфер окажется слишком мал.
Возвращаемый адрес урежется, если предоставленный буфер окажется слишком маленьким; в этом случае в addrlen будет возвращено значение большее чем было в вызове.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
- EBADF
- Аргумент sockfd не является допустимым дескриптором.
- EFAULT
- Аргумент addr указывает на память в недопустимой части адресуемого пространства процесса.
- EINVAL
- Неправильное значение аргумента addrlen (например, отрицательное).
- ENOBUFS
- Недостаточно ресурсов в системе для выполнения операции.
- ENOTCONN
- Сокет не подключён.
- ENOTSOCK
- Аргумент sockfd является файлом, а не сокетом.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
SVr4, 4.4BSD (функциональный вызов getpeername() впервые появился в 4.2BSD), POSIX.1-2001.
ЗАМЕЧАНИЯ¶
Третий аргумент функции getpeername() в действительности имеет тип int * (это именно так в 4.x BSD, libc4 и libc5). Определенное недопонимание привело к тому, что в стандарте POSIX появился тип socklen_t также используемый в glibc. Смотрите также accept(2).
СМОТРИТЕ ТАКЖЕ¶
accept(2), bind(2), getsockname(2), ip(7), socket(7), unix(7)
2008-12-03 | Linux |