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

UptoLike

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

61
получении сообщения она принимает соединение и запускает соответствующее
серверное приложение. Порты и соответствующие программы могут быть заданы в
файле ‘etc/inetd.conf’.
При каждом запросе на соединение, запускается новый серверный процесс. В
момент запуска соединение уже существует, гнездо задается с помощью стандартных
входного и выходного дескрипторов файлов, которые процесс немедленно может
использовать.
Конфигурирование inetd
Файл /etc/inetd.conf задает какие порты будут прослушиваться и какие
программы будут запускаться. Обычно каждая запись в этом файле занимает одну
строку. Приведем пример описания порта:
ftp stream tcp nowait root /libexec/ftpd ftpd
talk dgram udp wait root /libexec/talkd talkd
По порядку поля каждой записи имеют следующие значения:
1 указывает какой сервис обеспечивается данной программой;
2, 3 поля указывают стиль взаимодействия и протокол, который используется
прослушивающим гнездом. Второе поле должно быть именем способа
взаимодействия, переведенным в нижний регистр и без приставки SOCK_.
Третье поле должно быть именем одного из протоколов, перечисленных в
файле /etc/protocols. Обычно задается протокол tcp для потокового соединения
и udp для дейтаграмм;
4 поле должно принимать значение wait или nowait. Поле должно иметь
значение wait, если используется способ взаимодействия, не использующий
соединение или приложение является сервером, который запускается один раз
и принимает столько соединений, сколько будет запрошено. Если приложение
я
вляется многопоточным или способ взаимодействия использует соединение,
поле должно быть установлено в значение nowait;
5 поле задает с идентификатором какого пользователя должен быть запущен
процесс;
6, 7 эти поля задают запускаемую программу и аргументы запускаемого процесса.
Опции гнезд
Следующие функции используются для получения и установки опций гнезда.
Функции определены в файле <sys/socket.h>.
int getsockopt (int SOCKET, int LEVEL, int OPTNAME,
void *OPTVAL, socklen_t *OPTLEN-PTR)
Функция возвращает информацию о значении опции OPTNAME и уровня
LEVEL для гнезда SOCKET. Значение опции сохраняется в буфере, на который
указывает OPTVAL. перед вызовом в OPTLEN-PTR необходимо установить размер
буфера. При завершении выполнения это поле содержит количество байтов, в
действительности сохраненных в буфере. Для большинства опций значение имеет тип
int.
Функция возвращает 0 в случае успешного выполнения, -1 - в случае ошибки.
переменная errno может принимать следующие значения:
EBADF SOCKET не является дескриптором файла;
ENOTSOCK SOCKET не является гнездом;
ENOPROTOOPT опция OPTNAME не имеет смысла для заданного уровня LEVEL.
int setsockopt (int SOCKET, int LEVEL, int OPTNAME,
void *OPTVAL, socklen_t OPTLEN)
получении сообщения она принимает соединение и запускает соответствующее
серверное приложение. Порты и соответствующие программы могут быть заданы в
файле ‘etc/inetd.conf’.
        При каждом запросе на соединение, запускается новый серверный процесс. В
момент запуска соединение уже существует, гнездо задается с помощью стандартных
входного и выходного дескрипторов файлов, которые процесс немедленно может
использовать.

        Конфигурирование inetd
        Файл /etc/inetd.conf задает какие порты будут прослушиваться и какие
программы будут запускаться. Обычно каждая запись в этом файле занимает одну
строку. Приведем пример описания порта:
       ftp stream        tcp   nowait       root   /libexec/ftpd      ftpd
       talk dgram        udp   wait         root   /libexec/talkd     talkd
       По порядку поля каждой записи имеют следующие значения:
1      указывает какой сервис обеспечивается данной программой;
2, 3   поля указывают стиль взаимодействия и протокол, который используется
       прослушивающим гнездом. Второе поле должно быть именем способа
       взаимодействия, переведенным в нижний регистр и без приставки SOCK_.
       Третье поле должно быть именем одного из протоколов, перечисленных в
       файле /etc/protocols. Обычно задается протокол tcp для потокового соединения
       и udp для дейтаграмм;
4      поле должно принимать значение wait или nowait. Поле должно иметь
       значение wait, если используется способ взаимодействия, не использующий
       соединение или приложение является сервером, который запускается один раз
       и принимает столько соединений, сколько будет запрошено. Если приложение
       является многопоточным или способ взаимодействия использует соединение,
       поле должно быть установлено в значение nowait;
5      поле задает с идентификатором какого пользователя должен быть запущен
       процесс;
6, 7   эти поля задают запускаемую программу и аргументы запускаемого процесса.

      Опции гнезд
      Следующие функции используются для получения и установки опций гнезда.
Функции определены в файле .
       int getsockopt (int SOCKET, int LEVEL, int OPTNAME,
            void *OPTVAL, socklen_t *OPTLEN-PTR)
       Функция возвращает информацию о значении опции OPTNAME и уровня
LEVEL для гнезда SOCKET. Значение опции сохраняется в буфере, на который
указывает OPTVAL. перед вызовом в OPTLEN-PTR необходимо установить размер
буфера. При завершении выполнения это поле содержит количество байтов, в
действительности сохраненных в буфере. Для большинства опций значение имеет тип
int.
       Функция возвращает 0 в случае успешного выполнения, -1 - в случае ошибки.
переменная errno может принимать следующие значения:
EBADF             SOCKET не является дескриптором файла;
ENOTSOCK          SOCKET не является гнездом;
ENOPROTOOPT опция OPTNAME не имеет смысла для заданного уровня LEVEL.
       int setsockopt (int SOCKET, int LEVEL, int OPTNAME,
            void *OPTVAL, socklen_t OPTLEN)




                                                                                61