Книга: Основы программирования в Linux
Именование сокета
Именование сокета
Для того чтобы сделать сокет (созданный с помощью вызова socket
) доступным для других процессов, серверная программа должна присвоить сокету имя. Сокеты домена AF_UNIX
связаны с полным именем файла в файловой системе, как вы видели в программе-примере server1. Сокеты домена AF_INET
связаны с номером IP-порта.
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, size_t address len);
Системный вызов bind
присваивает адрес, заданный в параметре address
, неименованному сокету, связанному с дескриптором сокета socket
. Длина адресной структуры передается в параметре address_len
:
Длина и формат адреса зависят от адресного семейства. В системном вызове bind
указатель конкретной адресной структуры должен быть приведен к обобщенному адресному типу (struct sockaddr*)
.
В случае успешного завершения bind
возвращает 0. Если он завершается аварийно, возвращается -1, и переменной errno
присваивается одно из значений, перечисленных в табл. 15.2.
Таблица 15.2
Значение errno |
Описание |
---|---|
EBADF |
Неверный файловый дескриптор |
ENOTSOCK |
Файловый дескриптор не ссылается на сокет |
EINVAL |
Файловый дескриптор ссылается на сокет, уже получивший имя |
EADDRNOTAVAIL |
Недопустимый адрес |
EADDINUSE |
У адреса уже есть связанный с ним сокет |
Для сокетов домена AF_UNIX есть несколько дополнительных значений |
|
EACCESS |
Невозможно создать имя в файловой системе из-за прав доступа |
ENOTDIR , ENAMETOOLONG |
Означает недопустимое имя файла |
- Закрытие сокета
- Переименование компонентов
- Параметры сокета SO_REUSEADDR и SO_REUSEPORT
- 2.3.1. Именование дисков
- Переименование файлов и папок
- Универсальная структура адреса сокета
- Параметр сокета IP_RECVIF
- Параметр сокета SCTP_GET_PEER_ADDR_INFO
- Листинг 5.10. (socket-server.c) Сервер локального сокета
- 5.1.4. Переименование файлов
- Особенности символьного сокета версии IPv6
- Параметр сокета IP_OPTIONS