Лабораторная работа №2.
Параллельный эхо-сервер.

Шаблон кода параллельного сервера:
...
pid_t pid;
int listenfd, connfd;

listenfd = socket( ... );
bind(listenfd, ... );
listen(listenfd, LISTENQ);

for (;;) {
 connfd = accept(listenfd, ...); // подключение клиента, получение присоединенного сокета

 if ((pid = fork() == 0) {
  close(listenfd); /* дочерний процесс закрывает прослушиваемый сокет */
  doit(connfd);    /* обработка запроса на присоединенном сокете */
  close(connfd);   /* с этим клиентом закончено */
  exit(0);         /* дочерний процесс завершен */
 }

 close(connfd);    /* родительский процесс закрывает присоединенный сокет */
}
...

Задание

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