URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2027
[ Назад ]

Исходное сообщение
"пример исходников сервера"

Отправлено mazer , 29-Авг-03 16:39 
Господа, поделитесь пожалуйста ссылочкой или примером исходников сервера, подерживающего несколько TCP соединений одновременно :)

Содержание

Сообщения в этом обсуждении
"пример исходников сервера"
Отправлено XMan , 30-Авг-03 20:02 
apache, squid, xinetd, mysql, postgresql, sendmail, postfix....

Простейший код:

socket(...);
bind(...);
listen(...);

while (1) {
  int s=accept(...);
  if (s < 0) continue;
  case (fork()) {
     0: // потомок
         /* Дружно работаем с клиентом через соединение s */
         exit(код_возврата);
    -1: // ошибка
     default: // родитель
         close(s); break;
  };
};


Более сложные реализации:

1. использовать функции poll/select для работы с куче
2. запускать N потомков через fork и с пользуя механизм разделяемой памяти отдавать им соединения;
3. работать не с процессами, а с потоками (это я могу заслать, если хочешь).


"пример исходников сервера"
Отправлено XMan , 30-Авг-03 20:08 
apache, squid, xinetd, mysql, postgresql, sendmail, postfix....

Простейший код:

socket(...);
bind(...);
listen(...);

while (1) {
  int s=accept(...);
  if (s < 0) continue;
  case (fork()) {
     0: // потомок
         /* Дружно работаем с клиентом через соединение s */
         exit(код_возврата);
    -1: // ошибка
     default: // родитель
         close(s); break;
  };
};


Более сложные реализации:

1. использовать функции poll/select для работы с кучей соединений;
2. запускать N потомков через fork и с пользуя механизм разделяемой памяти отдавать им соединения;
3. работать не с процессами, а с потоками.

Пример последнего (самопальный сервер авторизации) я могу заслать по почте, если хочешь. Раскидывание соединений по потокам там уже отлажено и вряд ли будет меняться.