Книга: Основы программирования в 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 Означает недопустимое имя файла

Оглавление книги


Генерация: 2.524. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз