int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
ОПИСАНИЕ
bind
привязывает к сокету
sockfd
локальный адрес
my_addr
длиной
addrlen.
Традиционно, эта операция называется lqприсваивание сокету имени.rq
Когда сокет только что создан с помощью
socket(2),
он существует в пространстве имён (семействе адресов), но не имеет
назначенного имени.
Обычно сокету типа
SOCK_STREAM
требуется назначить локальный адрес с помощью
bind,
перед тем, как он сможет принимать соединения (см.
accept(2)).
Правила, используемые при привязке имён, разные в разных семействах
адресов. Обратитесь к соответствующему руководству в секции 7 за
дальнейшей информацией. Для
AF_INET
смотри
ip(7),
для
AF_UNIX
смотри
unix(7),
для
AF_APPLETALK
смотри
ddp(7),
для
AF_PACKET
смотри
packet(7),
для
AF_X25
смотри
x25(7),
а для
AF_NETLINK
смотри
netlink(7).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха возвращается ноль. При ошибке возвращается -1, а
errno
устанавливается должным образом.
ОШИБКИ
EBADF
sockfd
не является правильным дескриптором.
EINVAL
Сокет уже привязан к какому-то адресу. Эта ошибка в будущем может не
выдаваться, смотри
linux/unix/sock.c,
где описаны детали.
EACCES
Адрес защищен, или пользователь не является суперпользователем.
ENOTSOCK
Аргумент системного вызова является дескриптором файла, а не сокета.
Нижеследующие ошибки специфичны для сокетов домена UNIX
(AF_UNIX):
EINVAL
Параметр
addrlen
неверен, или сокет не был найден в семействе адресов
AF_UNIX.
EROFS
Попытка создания inode сокета на файловой системе "только для чтения".
EFAULT
my_addr
указывает за пределы доступного адресного пространства.
ENAMETOOLONG
my_addr
слишком длинно.
ENOENT
Файл не существует.
ENOMEM
Ядру не хватило памяти.
ENOTDIR
Компонент пути, использованный как каталог, в действительности таковым не является.
EACCES
Не разрешен поиск в одном из компонентов пути.
ELOOP
my_addr
является зацикленной символической ссылкой, то есть при подстановке
возникает ссылка на неё саму.
ОШИБКИ
Не описываются ключи, связанные с работой прозрачных прокси.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.4BSD (функция
bind
впервые появилась в BSD 4.2). SVr4 документирует дополнительные коды
ошибок
EADDRNOTAVAIL,
EADDRINUSE,
и
ENOSR,
и дополнительные коды ошибок домена Unix:
EIO
и
EISDIR
ЗАМЕЧАНИЕ
Третий аргумент вызова
bind
в действительности имеет тип
int
(это именно так в BSD 4.*, libc4 и libc5).
При разработке стандарта POSIX случилось некоторое недопонимание, и
появился тип
socklen_t.
Смотри также
accept(2).