Comments 58
Ни подсветки, ни отступов. Если топик целиком о коде, то не поленитесь его оформить так, чтобы не хотелось читать по диагонали.
Тема интересная, но воспользуйтесь пожалуйста Source Code Highlighter для упрощения чтения кода =)
Интересно. Буду рад и другим статьям такой же направленности. (Но отступов не хватает.)
Первое же, что увидел в этом коде — ни в одном из return ничего не выдается. Насколько я понимаю, тут есть два варианта, в зависимости от реализации системы:
1) Всегда будет возвращаться 0. Тогда некий скрипт, запускающий этот демон, не узнает, что уже на стадии инициализации все плохо.
2) Код возврата будет тот же, что и у прошлой вызванной команды. Тогда если прошлый демон не смог стартовать, а этот в порядке, тот же некий скрипт будет думать, что и этому демону не удалось стартовать.
1) Всегда будет возвращаться 0. Тогда некий скрипт, запускающий этот демон, не узнает, что уже на стадии инициализации все плохо.
2) Код возврата будет тот же, что и у прошлой вызванной команды. Тогда если прошлый демон не смог стартовать, а этот в порядке, тот же некий скрипт будет думать, что и этому демону не удалось стартовать.
это ваша статья или скопирована/переведена? если второе, предоставте линк пожалийста. или это из книги?
UFO just landed and posted this here
уж больно похоже на вытяжку из какого-то мануала. прошу прощение если я неправ
автор этой статьи я,
основой послужила программа, которую я смог написать после прочтения книги Стивенсона и решил поделиться своими знаниями.
если лох -я, значить статья неудачная
Стивенсон — уважаемый в мире специалист по Unix и признанный писатель,
я и намека не сделал, что лох он
да, есть вытяжки из мануалов, например:
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, socklen_t address_len);
это сделано специально для новичков, что бы показать правильное обращение к функциям и какие инклуды ставить в заголовочном файле.
возможно, можно было написать больше буковок
основой послужила программа, которую я смог написать после прочтения книги Стивенсона и решил поделиться своими знаниями.
если лох -я, значить статья неудачная
Стивенсон — уважаемый в мире специалист по Unix и признанный писатель,
я и намека не сделал, что лох он
да, есть вытяжки из мануалов, например:
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, socklen_t address_len);
это сделано специально для новичков, что бы показать правильное обращение к функциям и какие инклуды ставить в заголовочном файле.
возможно, можно было написать больше буковок
UFO just landed and posted this here
Тема полезная но подача материала неудачная ИМХО
минусы:
1. форматирование кода отсутствуют
2. пример нельзя скопировать и запустить (ни инклюдов, ни функции main, ни processrc)
3. как-то все очень сумбурно :)
минусы:
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»);
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 :)
не получается нормально подсветить через этот билдер
можно закописастить в govnokod.ru :)
Есть такой журнал «Хакер», они там тоже занимаются вольным изложением манов.
Хм, а функция select() (ну или там poll(), epoll(), и прочие kqueue()) уже не нужны в BSD socket API? :)
Сокеты — они не BSD, они Berkley
select — относится к стандартному сокет апи, а вот ни poll, ни epoll, ни kqueue — нет. Более того, в BSD нет epoll — это Linux-расширение.
select — относится к стандартному сокет апи, а вот ни poll, ни epoll, ни kqueue — нет. Более того, в BSD нет epoll — это Linux-расширение.
а об этом как нибудь напишу еще
времени нет совсем на разработку,
а на писательство и подавно.
это уже не относится к классическому TCP серверу
времени нет совсем на разработку,
а на писательство и подавно.
это уже не относится к классическому TCP серверу
groups.google.com/group/fido7.ru.unix.prog/browse_thread/thread/c8952c3f53a067c0
Читать до просветления. Сейчас fsm-based сервера — тоже классика.
Читать до просветления. Сейчас fsm-based сервера — тоже классика.
Да ладно вам придираться к словам! именно поэтому эти функции я указал в скобках, что они имплементируют по-другому то, для чего существует select().
И что же, по-вашему слова «Berkley» нет в расшифровке аббревиатуры «BSD»?
Человек про главную вещь не сказал, а вы…
И что же, по-вашему слова «Berkley» нет в расшифровке аббревиатуры «BSD»?
Человек про главную вещь не сказал, а вы…
Поздравляю, вы написали форк-бомбу :) Несколько тысяч ничего не делающих клиентов убьют ваш сервер, и не создадут никакой нагрузки на атакующую машину :)
спасибо за поздравление…
сотни тысяч таких бобм удачно работали в течении последних двух десятилетий
сотни тысяч таких бобм удачно работали в течении последних двух десятилетий
Примеры, примеры :) Вот вы сейчас назовёте апач/любой mta — и я сразу покажу, в чём разница.
я не хочу спорить на тему hiload, WEB и высокой производительности
сотни тысяч таких серверов крутилось в течении 30 и более лет и крутится по настоящее время и они успешно решают свои задачи.
тема статьи классический сервер у которого есть свои недостатки и свои достоинства.
а не суперпроизводительный, мультиплексорный или тредовый… Я думаю, Вы об этом напишете лучше. Критиковать умеют все, а заминусовать — дай хлебом не корми…
Ладно, попробую на пальцах:
Если взять любой курс, например литературу, то сперва изучается классика,
а потом рассматриваются современные направления…
через 5-10 лет, мы будем смеяться и над производительностью мультиплексорного сервера
прогресс несомненно движется
сотни тысяч таких серверов крутилось в течении 30 и более лет и крутится по настоящее время и они успешно решают свои задачи.
тема статьи классический сервер у которого есть свои недостатки и свои достоинства.
а не суперпроизводительный, мультиплексорный или тредовый… Я думаю, Вы об этом напишете лучше. Критиковать умеют все, а заминусовать — дай хлебом не корми…
Ладно, попробую на пальцах:
Если взять любой курс, например литературу, то сперва изучается классика,
а потом рассматриваются современные направления…
через 5-10 лет, мы будем смеяться и над производительностью мультиплексорного сервера
прогресс несомненно движется
А че примеры? Сначала сплоит с тебя. ;)
Рабочий код, который откроет дцать тычяч подключений?) Разве это серьёзный эксплоит, который стоит вставлять сюда?)
А намекал я на то, что везде в форкающхся серверах стоит ограничение на максимальное количество одновременно обслуживаемых клиентов. Остальные, традиционно, ждут в backlog сокета. В таком случае атакующий может съесть ресурсы приложения, но не всей системы. А здесь 10к подключений = 10к форков, а лимит на количество процессов в системе не бесконечный, да и форк небесплатен.
А намекал я на то, что везде в форкающхся серверах стоит ограничение на максимальное количество одновременно обслуживаемых клиентов. Остальные, традиционно, ждут в backlog сокета. В таком случае атакующий может съесть ресурсы приложения, но не всей системы. А здесь 10к подключений = 10к форков, а лимит на количество процессов в системе не бесконечный, да и форк небесплатен.
хм… согласен:
когда-то аппач считался прогрессивным сервером
а теперь когда говорим о хайлоаде и называем слово аппач, то у меня появляется улыбка
когда-то аппач считался прогрессивным сервером
а теперь когда говорим о хайлоаде и называем слово аппач, то у меня появляется улыбка
UFO just landed and posted this here
лабораторная работа 2 курс
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_
>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.
классический TCP сервер