bind

Autres langues

Langue: ru

Version: 1998-10-03 (fedora - 25/11/07)

Section: 2 (Appels système)

НАЗВАНИЕ

bind - привязать имя к сокету

ОБЗОР

#include <sys/types.h>
#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

ОПИСАНИЕ

bind привязывает к сокету sockfd локальный адрес my_addr длиной addrlen. Традиционно, эта операция называется "присваивание сокету имени." Когда сокет только что создан с помощью 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).

СМОТРИ ТАКЖЕ

accept(2), connect(2), listen(2), socket(2), getsockname(2), ip(7), socket(7)

ПЕРЕВОД

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999