Операционные системы ← ЛабораторныеЛабораторная работа №2

Сокеты, модель postfix/apache

Изучить интерфейс сокетов в Юниксе (системные вызовы socket, bind, listen, accept, connect) и написать заданный вариантом сервер. Модель приложения должна быть аналогичной модели postfix/apache.

Сервер при приеме соединений должен порождать дочерние процессы, которые принимают запросы и выполняют их. Количество дочерних процессов должно быть ограничено. Каждый дочерний процесс после обработки одного клиента должен вместе с родительским процессом пытаться принимать следующие соединения. Количество клиентов, обслуживаемых одним дочерним процессов должно быть тоже ограниченно. После обслуживания максимального числа клиентов, дочерний процесс должен выйти, а родительский процесс, если к этому моменту количество дочерних процессов достигло максимума, должен продолжить принимать новые соединения.

Все детали протоколов разрабатываются студентами самостоятельно и согласуются с преподавателем. Сервер должен допускать только разумное поведение клиентов. Например, в третьем варианте недопускается ставить крестик и нолик на уже занятую клетку. И тому подобное.

Варианты:

  1. Игровой сервер. Клиенты играют в крестики-нолики против компьютера.
  2. Игровой сервер. Клиенты играют в двадцать одну спичку против компьютера.
  3. Веб-сервер, отдающий статические страницы и файлы.
  4. Сервер, вычисляющий простые арифметические выражения в обратной польской записи.
  5. Простейший прокси-сервер.

Пояснения к заданиям

В 1-м и 2-м заданиях одно соединение должно закрываться после одной партии.

В 3-м задании достаточно реализовать простейшую форму запроса GET с закрытием соединения после одно запроса. Предусмотреть поддержку нескольких Content-Type (в зависимости от расширения файла).

В 4-м задании сервер должен принимать выражения, содержащие операции +, -, *, /, по одному выражению на строку, вычислять их и посылать ответ, разрывать соединение после приема пустой строки. При приеме некорректного выражения, посылать ответ 'error'.

В 5-м задании подразумевается простейший протокол. Содержимое всей сессии клиента передается фиксированному серверу, имя которого указывается как аргумент командной строки и ответ целиком передается клиенту. Сервер должен передавать данные по мере поступления и не ждать окончания запроса.