Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 41 стр.

UptoLike

Составители: 

41
};
sa_family код формата адреса;
sa_data указывает адрес гнезда, который зависит от формата. Его длина
зависит от формата и может быть более определенной длины в 14
байтов.
Формат адреса может задаваться следующими символьными именами.
Каждому имени формата соответствует символьное имя пространства имен,
начинающееся с символов ‘PF_’:
AF_LOCAL определяет формат адреса локального пространства имен,
соответствующее имя пространства имен – PF_LOCAL;
AF_UNIX синоним для AF_LOCAL, соответствующее имя пространства имен
PF_UNIX;
AF_FILE еще один синоним для AF_LOCAL, соответствующее имя
пространства имен – PF_FILE;
AF_INET определяет формат адреса для пространства имен Интернет,
определяемого именем PF_INET;
AF_INET6 определяет формат, идентичный AF_INET, однако соответствует
протоколу IPv6, соответствующее имя пространства имен
PF_INET6;
AF_UNSPEC определяет отсутствие конкретного формата адреса. Используется в
редких случаях, когда необходимо очистить адрес назначения по
умолчанию при отправлении дейтаграмм. Соответствующее имя
пространства имен PF_UNSPEC существует, но никаких причин
использования его в программе не существует.
В Linux определяются и многие другие типы сетей, большинство из которых в
настоящее время не реализованы.
Установка адреса гнезда
int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)
Функция назначает адрес гнезду SOCKET. Аргументы ADDR и LENGTH
определяют адрес. Первая часть адреса всегда определяет формат адреса. Функция
возвращает 0 в случае успеха и –1 в случае возникновения ошибки, а переменная errno
может принимать следующие значения:
EBADF аргумент SOCKET не является правильным дескриптором
файла;
ENOTSOCK дескриптор SOCKET не является гнездом;
EADDRNOTAVAIL указанный адрес не доступен на данной машине;
EADDRINUSE другое гнездо уже использует указанный адрес;
EINVAL гнездо уже имеет адрес;
EACCES нет доступа для установки адреса гнезда.
Существуют и другие коды ошибок, зависящие от используемого пространства
имен.
Чтение адреса гнезда
Для получения адреса гнезда служит функция getsockname. Прототип функции
находится в заголовочном файле <sys/socket.h>.
int getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t
*LENGTH-PTR)
Функция возвращает адрес гнезда SOCKET в участки памяти, указанные
аргументами ADDR и LENGTH-PTR. Возвращаемое значение равно 0, если функция
        };
sa_family        код формата адреса;
sa_data          указывает адрес гнезда, который зависит от формата. Его длина
                 зависит от формата и может быть более определенной длины в 14
                 байтов.
       Формат адреса может задаваться следующими символьными именами.
Каждому имени формата соответствует символьное имя пространства имен,
начинающееся с символов ‘PF_’:
AF_LOCAL         определяет формат адреса локального пространства имен,
                 соответствующее имя пространства имен – PF_LOCAL;
AF_UNIX          синоним для AF_LOCAL, соответствующее имя пространства имен –
                 PF_UNIX;
AF_FILE          еще один синоним для AF_LOCAL, соответствующее имя
                 пространства имен – PF_FILE;
AF_INET          определяет формат адреса для пространства имен Интернет,
                 определяемого именем PF_INET;
AF_INET6         определяет формат, идентичный AF_INET, однако соответствует
                 протоколу IPv6, соответствующее имя пространства имен –
                 PF_INET6;
AF_UNSPEC        определяет отсутствие конкретного формата адреса. Используется в
                 редких случаях, когда необходимо очистить адрес назначения по
                 умолчанию при отправлении дейтаграмм. Соответствующее имя
                 пространства имен PF_UNSPEC существует, но никаких причин
                 использования его в программе не существует.
       В Linux определяются и многие другие типы сетей, большинство из которых в
настоящее время не реализованы.

        Установка адреса гнезда
        int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)
       Функция назначает адрес гнезду SOCKET. Аргументы ADDR и LENGTH
определяют адрес. Первая часть адреса всегда определяет формат адреса. Функция
возвращает 0 в случае успеха и –1 в случае возникновения ошибки, а переменная errno
может принимать следующие значения:
EBADF                    аргумент SOCKET не является правильным дескриптором
                         файла;
ENOTSOCK                 дескриптор SOCKET не является гнездом;
EADDRNOTAVAIL            указанный адрес не доступен на данной машине;
EADDRINUSE               другое гнездо уже использует указанный адрес;
EINVAL                   гнездо уже имеет адрес;
EACCES                   нет доступа для установки адреса гнезда.
       Существуют и другие коды ошибок, зависящие от используемого пространства
имен.

       Чтение адреса гнезда
       Для получения адреса гнезда служит функция getsockname. Прототип функции
находится в заголовочном файле .
       int getsockname     (int   SOCKET,   struct   sockaddr   *ADDR,   socklen_t
*LENGTH-PTR)
       Функция возвращает адрес гнезда SOCKET в участки памяти, указанные
аргументами ADDR и LENGTH-PTR. Возвращаемое значение равно 0, если функция


                                                                                41