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