- пример исходников сервера, XMan, 20:02 , 30-Авг-03 (1)
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, 20:08 , 30-Авг-03 (2)
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. работать не с процессами, а с потоками. Пример последнего (самопальный сервер авторизации) я могу заслать по почте, если хочешь. Раскидывание соединений по потокам там уже отлажено и вряд ли будет меняться.
|