bindresvport -
привязывает
сокет к
привилегированному
порту IP
Standard C library (
libc,
-lc)
#include <sys/types.h>
#include <netinet/in.h>
int bindresvport(int sockfd, struct sockaddr_in *sin);
Функция
bindresvport()
используется
для
привязки
сокета, на
который
указывает
файловый
дескриптор
sockfd, к
привилегированному
анонимному
порту IP, то
есть
произвольно
выбранному
порту с
номером из
диапазона
от 512 до 1023.
Если
bind(2),
вызываемый
из
bindresvport(),
выполнен
без ошибок,
и значение
sin не равно NULL,
то в
sin->sin_port
возвращается
выделенный
номер
порта.
Значение
sin
может быть
NULL; в этом
случае
sin->sin_family
неявно
присваивается
значение
AF_INET. Однако в
этом
случае
bindresvport()
не
возвращает
номер
порта,
который
был в
действительности
выделен
(эта
информация
может быть
получена
позже с
помощью
getsockname(2)).
bindresvport() returns 0 on success; otherwise -1 is returned and
errno is set to indicate the error.
Функция
bindresvport()
может
завершиться
с ошибкой
по тем же
причинам
что и
bind(2).
Также
могут
возникать
следующие
ошибки:
- EACCES
- Вызывающий
процесс не
имеет прав
(в Linux:
вызывающий
процесс не
имеет
мандата
CAP_NET_BIND_SERVICE в
пользовательском
пространстве,
управляющим
своим
сетевым
пространством
имён).
- EADDRINUSE
- Все
привилегированные
порты
заняты.
-
EAFNOSUPPORT (EPFNOSUPPORT в glibc 2.7
и старше)
- Значение
sin не равно NULL
и sin->sin_family не
равно AF_INET.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
bindresvport() |
Безвредность
в нитях |
. glibc >= 2.17: MT-Safe;
glibc < 2.17: MT-Unsafe |
До glibc 2.17 в
функции
bindresvport()
используется
статическая
незащищённая
блокировкой
переменная,
поэтому
функцию
нельзя
использовать
в
нескольких
нитях
одновременно.
Нет в POSIX.1.
Присутствует
в BSD, Solaris и
многих
других
системах.
В отличие
от других
реализаций
bindresvport(), версия glibc
игнорирует
любые
значения,
которые
передал
вызывающий
в
sin->sin_port.
bind(2),
getsockname(2)
Русский
перевод
этой
страницы
руководства
был сделан
Artyom Kunyov <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitriy Ovchinnikov
<
[email protected]>, Dmitry Bolkhovskikh <
[email protected]>,
ITriskTI <
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]