Первое же, что увидел в этом коде — ни в одном из return ничего не выдается. Насколько я понимаю, тут есть два варианта, в зависимости от реализации системы:
1) Всегда будет возвращаться 0. Тогда некий скрипт, запускающий этот демон, не узнает, что уже на стадии инициализации все плохо.
2) Код возврата будет тот же, что и у прошлой вызванной команды. Тогда если прошлый демон не смог стартовать, а этот в порядке, тот же некий скрипт будет думать, что и этому демону не удалось стартовать.
Конечно, меня за это заминусуют, но я очень прошу плюсануть мою карму хотя бы до того, чтобы я смог написать статью в свой блог. Ибо готова первая статья о том, чем учебники отличаются от реального программирования под Linux.
Тема полезная но подача материала неудачная ИМХО
минусы:
1. форматирование кода отсутствуют
2. пример нельзя скопировать и запустить (ни инклюдов, ни функции main, ни processrc)
3. как-то все очень сумбурно :)
Сокеты — они не BSD, они Berkley
select — относится к стандартному сокет апи, а вот ни poll, ни epoll, ни kqueue — нет. Более того, в BSD нет epoll — это Linux-расширение.
Да ладно вам придираться к словам! именно поэтому эти функции я указал в скобках, что они имплементируют по-другому то, для чего существует select().
И что же, по-вашему слова «Berkley» нет в расшифровке аббревиатуры «BSD»?
Человек про главную вещь не сказал, а вы…
Поздравляю, вы написали форк-бомбу :) Несколько тысяч ничего не делающих клиентов убьют ваш сервер, и не создадут никакой нагрузки на атакующую машину :)
я не хочу спорить на тему hiload, WEB и высокой производительности
сотни тысяч таких серверов крутилось в течении 30 и более лет и крутится по настоящее время и они успешно решают свои задачи.
тема статьи классический сервер у которого есть свои недостатки и свои достоинства.
а не суперпроизводительный, мультиплексорный или тредовый… Я думаю, Вы об этом напишете лучше. Критиковать умеют все, а заминусовать — дай хлебом не корми…
Ладно, попробую на пальцах:
Если взять любой курс, например литературу, то сперва изучается классика,
а потом рассматриваются современные направления…
через 5-10 лет, мы будем смеяться и над производительностью мультиплексорного сервера
прогресс несомненно движется
Рабочий код, который откроет дцать тычяч подключений?) Разве это серьёзный эксплоит, который стоит вставлять сюда?)
А намекал я на то, что везде в форкающхся серверах стоит ограничение на максимальное количество одновременно обслуживаемых клиентов. Остальные, традиционно, ждут в backlog сокета. В таком случае атакующий может съесть ресурсы приложения, но не всей системы. А здесь 10к подключений = 10к форков, а лимит на количество процессов в системе не бесконечный, да и форк небесплатен.
>#include <sys/socket.h>
>int socket(int domain, int type, int protocol);
>
>константа domain:
>AF_INET — IP сокет
>AF_UNIX — UNIX сокет
На самом деле в рамках вызова socket в качестве параметра domain идеологически правильно использовать константы PF_ (protocol family), т.е. соответственно PF_INET и PF_UNIX. А константы AF_ (address family) должны использоваться в поле family структур sockaddr_. Хотя по значениям эти константы сейчас равны, а в man socket линукса написано про AF_, в мане фрибсд написано про PF_
классический TCP сервер