НАЗВАНИЕ¶
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