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

UptoLike

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

52
ENFILE операционная система имеет слишком много дескрипторов
открытых файлов;
EACCESS процесс не имеет привилегий для создания гнезда с
заданным способом взаимодействия и протоколом;
ENOBUFS внутреннее буферное пространство операционной системы
переполнено.
Возвращаемый дескриптор файла поддерживает операции чтения и записи, но
не поддерживает операции позиционирования.
Закрытие гнезда
При завершении использования гнезда, оно может быть закрыто с помощью
вызова close. Если к моменту вызова передача данных еще не закончена, обычно
функция ожидает окончания передачи, а затем закрывает дескриптор.
Прервать передачу данных через гнездо можно прервать с помощью вызова
функции
int shutdown (int SOCKET, int HOW)
Функция закрывает соединение гнезда SOCKET. Аргумент HOW может
принимать следующие значения:
0 останавливает получение данных на заданное гнездо. Если данные еще
передаются, передача прекращается;
1 останавливает попытки передать данные;
2 останавливает и получение и передачу данных.
В случае успешного выполнения функция возвращает значение 0, в противном
случае возвращается -1. Переменная errno может принимать следующие значения:
EBADF SOCKET не является правильным дескриптором файла;
ENOTSOCK SOCKET не является гнездом;
ENOTCONN нет соединения с SOCKET.
Пары гнезд
Пара гнезд состоит из двух соединенных (но не имеющих имен) гнезд. такая
пара используется как неименованные каналы, за исключением двунаправленности
передачи данных. Пара гнезд создается с помощью следующей функции.
int socketpair (int NAMESPACE, int STYLE, int PROTOCOL,
int FILEDES[2])
Функция создает пару гнезд, возвращаемых в FILEDES[0] и FILEDES[1]. Пара
гнезд представляет собой дуплексный канал передачи данных, оба гнезда доступны как
на чтение, так и на запись.
Все аргументы соответствуют соответствующим аргументам функции socket.
Пространство имен должно быть AF_LOCAL, протокол - по умолчанию (равен 0).
Функция возвращает 0, если выполнилась успешно, в противном случае
возвращается -1. Переменная errno может принимать одно из следующих значений:
EMFILE процесс имеет слишком много открытых дескрипторов
файлов;
EAFNOSUPPORT задаваемое пространство имен не поддерживается;
EPROTONOSUPPORT заданный протокол не поддерживается;
EOPNOTSUPP заданный протокол не поддерживает создание пары гнезд.
ENFILE                    операционная система имеет слишком много дескрипторов
                          открытых файлов;
EACCESS                   процесс не имеет привилегий для создания гнезда с
                          заданным способом взаимодействия и протоколом;
ENOBUFS                   внутреннее буферное пространство операционной системы
                          переполнено.
        Возвращаемый дескриптор файла поддерживает операции чтения и записи, но
не поддерживает операции позиционирования.

       Закрытие гнезда
       При завершении использования гнезда, оно может быть закрыто с помощью
вызова close. Если к моменту вызова передача данных еще не закончена, обычно
функция ожидает окончания передачи, а затем закрывает дескриптор.
       Прервать передачу данных через гнездо можно прервать с помощью вызова
функции
         int shutdown (int SOCKET, int HOW)
        Функция закрывает соединение гнезда SOCKET. Аргумент HOW может
принимать следующие значения:
0       останавливает получение данных на заданное гнездо. Если данные еще
        передаются, передача прекращается;
1       останавливает попытки передать данные;
2       останавливает и получение и передачу данных.
        В случае успешного выполнения функция возвращает значение 0, в противном
случае возвращается -1. Переменная errno может принимать следующие значения:
EBADF                SOCKET не является правильным дескриптором файла;
ENOTSOCK             SOCKET не является гнездом;
ENOTCONN             нет соединения с SOCKET.

       Пары гнезд
       Пара гнезд состоит из двух соединенных (но не имеющих имен) гнезд. такая
пара используется как неименованные каналы, за исключением двунаправленности
передачи данных. Пара гнезд создается с помощью следующей функции.
         int    socketpair   (int   NAMESPACE,   int    STYLE,   int    PROTOCOL,
               int FILEDES[2])
        Функция создает пару гнезд, возвращаемых в FILEDES[0] и FILEDES[1]. Пара
гнезд представляет собой дуплексный канал передачи данных, оба гнезда доступны как
на чтение, так и на запись.
        Все аргументы соответствуют соответствующим аргументам функции socket.
Пространство имен должно быть AF_LOCAL, протокол - по умолчанию (равен 0).
        Функция возвращает 0, если выполнилась успешно, в противном случае
возвращается -1. Переменная errno может принимать одно из следующих значений:
EMFILE                      процесс имеет слишком много открытых дескрипторов
                            файлов;
EAFNOSUPPORT                задаваемое пространство имен не поддерживается;
EPROTONOSUPPORT             заданный протокол не поддерживается;
EOPNOTSUPP                  заданный протокол не поддерживает создание пары гнезд.




         52