Pull to refresh

Comments 58

Ни подсветки, ни отступов. Если топик целиком о коде, то не поленитесь его оформить так, чтобы не хотелось читать по диагонали.
Хотя бы в цитаты оформить с чертой…
Тема интересная, но воспользуйтесь пожалуйста Source Code Highlighter для упрощения чтения кода =)
Интересно. Буду рад и другим статьям такой же направленности. (Но отступов не хватает.)
спасибо,
код отформатировать стандартными средствами как-то не получается

была идея прогнать через аппач и вставить с подсветкой
так аппач снес… :)
Первое же, что увидел в этом коде — ни в одном из return ничего не выдается. Насколько я понимаю, тут есть два варианта, в зависимости от реализации системы:
1) Всегда будет возвращаться 0. Тогда некий скрипт, запускающий этот демон, не узнает, что уже на стадии инициализации все плохо.
2) Код возврата будет тот же, что и у прошлой вызванной команды. Тогда если прошлый демон не смог стартовать, а этот в порядке, тот же некий скрипт будет думать, что и этому демону не удалось стартовать.
Конечно, меня за это заминусуют, но я очень прошу плюсануть мою карму хотя бы до того, чтобы я смог написать статью в свой блог. Ибо готова первая статья о том, чем учебники отличаются от реального программирования под Linux.
это не программа а кусок кода, взятый из реальной программы,
по этому, для лучшего понимания все лишнее порезано и упрощено
С удовольствием бы прочел вашу статью
спасибо,
постараюсь в короткие сроки написать продолжение
это ваша статья или скопирована/переведена? если второе, предоставте линк пожалийста. или это из книги?
UFO just landed and posted this here
уж больно похоже на вытяжку из какого-то мануала. прошу прощение если я неправ
автор этой статьи я,
основой послужила программа, которую я смог написать после прочтения книги Стивенсона и решил поделиться своими знаниями.

если лох -я, значить статья неудачная
Стивенсон — уважаемый в мире специалист по Unix и признанный писатель,
я и намека не сделал, что лох он

да, есть вытяжки из мануалов, например:
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, socklen_t address_len);

это сделано специально для новичков, что бы показать правильное обращение к функциям и какие инклуды ставить в заголовочном файле.

возможно, можно было написать больше буковок
UFO just landed and posted this here
UFO just landed and posted this here
у Стивенсона наверное…
на Опеннете — его переводы

что касается материала, то хотелось внести в новый блог что-то новое,
чего мне самому хотелось бы почитать,
по принципу «Кто если не Я»

что касается плагиата, то см мой коммент выше
Тема полезная но подача материала неудачная ИМХО
минусы:
1. форматирование кода отсутствуют
2. пример нельзя скопировать и запустить (ни инклюдов, ни функции main, ни processrc)
3. как-то все очень сумбурно :)
спасибо, сейчас поправлю

у нас удивительная «Страна Советов»
все хотят сразу и на готовое, все плохо, но при этом ничего не сделать…
увы — менталитет…

если говорят: переписал маны, но увы,
сами не могут написать-то лучше…

если говорят что уже где-то читали и материал устарел,
то почему он, такой старый еще не размещен на таком популярном сервисе?

если говорят, что есть новые методы и подходы:
но увы… где они??? почему мы о них умалчиваем???

извини, наболело, просто это не первый случай.
ага, минуснули
правда-матка глаза режет

заметит тенденцию,
критикует тот кто меньше всего пишет.
получилась такая ерунда
5
6 // создаем дескриптор сокета
7 if( -1 == ( ls = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) )) {
8 perror( «Socket can not created!\n»);
странно, а здесь не подсветки и символы в порядке…
В камментариях, наверное, не все теги можно использовать. Попробуй вставить сгенерированный хайлайтером код в твою статью и сделать предпросмотр.
увы не получается…
там стили пропадают
GeSHi © 2004 — 2007 ни когда не дружила с отличными от ANSI кодировками.
не получается нормально подсветить через этот билдер

можно закописастить в govnokod.ru :)

Есть такой журнал «Хакер», они там тоже занимаются вольным изложением манов.
Ну не знаю. Иногда там попадаются очень даже полезные статьи. ИМХО
Хм, а функция select() (ну или там poll(), epoll(), и прочие kqueue()) уже не нужны в BSD socket API? :)
Сокеты — они не BSD, они Berkley
select — относится к стандартному сокет апи, а вот ни poll, ни epoll, ни kqueue — нет. Более того, в BSD нет epoll — это Linux-расширение.
а об этом как нибудь напишу еще
времени нет совсем на разработку,
а на писательство и подавно.

это уже не относится к классическому TCP серверу
и почему бы тебе это не оформить в ввиде статьи с красивыми примерами?
Да ладно вам придираться к словам! именно поэтому эти функции я указал в скобках, что они имплементируют по-другому то, для чего существует select().
И что же, по-вашему слова «Berkley» нет в расшифровке аббревиатуры «BSD»?
Человек про главную вещь не сказал, а вы…
Поздравляю, вы написали форк-бомбу :) Несколько тысяч ничего не делающих клиентов убьют ваш сервер, и не создадут никакой нагрузки на атакующую машину :)
спасибо за поздравление…

сотни тысяч таких бобм удачно работали в течении последних двух десятилетий
Примеры, примеры :) Вот вы сейчас назовёте апач/любой mta — и я сразу покажу, в чём разница.
я не хочу спорить на тему hiload, WEB и высокой производительности
сотни тысяч таких серверов крутилось в течении 30 и более лет и крутится по настоящее время и они успешно решают свои задачи.

тема статьи классический сервер у которого есть свои недостатки и свои достоинства.
а не суперпроизводительный, мультиплексорный или тредовый… Я думаю, Вы об этом напишете лучше. Критиковать умеют все, а заминусовать — дай хлебом не корми…

Ладно, попробую на пальцах:
Если взять любой курс, например литературу, то сперва изучается классика,
а потом рассматриваются современные направления…

через 5-10 лет, мы будем смеяться и над производительностью мультиплексорного сервера
прогресс несомненно движется
А че примеры? Сначала сплоит с тебя. ;)
Рабочий код, который откроет дцать тычяч подключений?) Разве это серьёзный эксплоит, который стоит вставлять сюда?)

А намекал я на то, что везде в форкающхся серверах стоит ограничение на максимальное количество одновременно обслуживаемых клиентов. Остальные, традиционно, ждут в backlog сокета. В таком случае атакующий может съесть ресурсы приложения, но не всей системы. А здесь 10к подключений = 10к форков, а лимит на количество процессов в системе не бесконечный, да и форк небесплатен.
ограничение реализуется простым int count?
Не совсем. Сколько мы запустили — легко можем сказать, а сколько умерло? Надо перехватить SIGCHLD и вызывать waitpid.
цитирую конец статьи:
Что не вошло и будет отдельно изложено другими статьями: описание команды fork, обработка сигналов, демонизация процесса.
хм… согласен:
когда-то аппач считался прогрессивным сервером
а теперь когда говорим о хайлоаде и называем слово аппач, то у меня появляется улыбка
А кто-то не может слезть с апача. Как тяжёлый бекенд, он вполне в своей нише. Ставить его наружу — это другое дело.
UFO just landed and posted this here
надо начинать с самого простого,
еще две части дописать осталось,
ну а далее рассмотрим обработку процесса в в потоке.
Если бы :) Не везде. Правда, те, кому надо делают это еще на первом или в школе :)
UFO just landed and posted this here
>#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_
Sign up to leave a comment.

Articles