Rating@Mail.ru

Форум сайта "Виртуальная энциклопедия "Linux по-русски"


Текущее время: 28 май 2017, 11:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.
Автор Сообщение
Непрочитанное сообщениеДобавлено: 23 апр 2012, 20:45 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Это тема - продолжение того, что названо в viewtopic.php?f=9&t=1661#p3702:
Цитата:
А вот ещё 2 статьи:
- Сеть IP - когда писать программы лень
- Сервер TCP/IP... много серверов хороших и разных
... это я написал по поводу простого использования inetd году в ... 2003-м (? или чуть раньше ... это ещё отрабатывалось в ОС QNX).
P.S. удивило, что поиск по фразе "много серверов хороших и разных" показал, что статья эта за прошедшие годы растиражирована по интернет в десятках, если не сотнях экземпляров...


Поскольку а). по этим поводам мне не раз приходилось обращаться и б). за 10 лет кое-что поменялось (но мало) и в). всё это отрабатывалось в ОС QNX + хотелось бы адаптировать к Linux - то решил я такую ревизию собрать в отдельные темы (для себя).
Если кому интересно будет - пользуйтесь.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 23 апр 2012, 20:47 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Как я там, в исходной теме, позже успел дописать:
Olej писал(а):
P.P.S. (дописано позже)
Вот самые лучшие экземпляры этих статей, на сайте журнала СТА Изображение :
http://www.cta.ru/online/online_progr-nets.htm
- для скачивания: здесь и текст, и примеры архивом, и всё с нормальной разметкой... в отличие от десятков пыанэрски-подростковых сайтов, которые покопировали "абы було".

- то в качестве исходного материала 10 летней давности берём именно эти файлы с журнала СТА.

Заметно поменялось что? 2 пункта:
- адаптировать это не под строго выдерживающую стандарты POSIX OS QNX, а под "колхозную" OS Linux, где к стандартам API достаточно вольное отношение...
- всё это использовать не через inetd, а через xinetd, который за эти годы стал постфактум-стандарт в Linux.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 23 апр 2012, 21:00 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Собираем материалы по конфигурированию xinetd (я много работал раньше с inetd, но в xinetd его заменившего многое поменялось).

1.
Установка и кофигурирование xinetd
Цитата:
Файл конфигурации xinetd - /etc/xinetd.conf (по умолчанию) отличается по синтаксису от файла конфигурации inetd.

- у меня в рабочем дистрибутиве (Fedora 15) конф. фал /etc/xinetd.conf, после определения ряда общих констант-параметров, ссылается на каталог - но это обычная практика:
Код:
includedir /etc/xinetd.d

- а все входящие в xinetd.conf текстовые секции (то, что было строками в inetd.conf) представлены отдельными файлами в этом каталоге, которые обрабатываются последовательно:
Код:
[root@notebook etc]# tree /etc/xinetd.d
/etc/xinetd.d
├── chargen-dgram
├── chargen-stream
├── cvs
├── daytime-dgram
├── daytime-stream
├── discard-dgram
├── discard-stream
├── echo-dgram
├── echo-stream
├── pure-ftpd
├── rsync
├── tcpmux-server
├── tftp
├── time-dgram
├── time-stream
└── xproftpd

0 directories, 16 files


2. это из man (только я не обнаружил из какой UNIX-системы man)
http://lantan.chat.ru/xinetd.html
Цитата:
УПРАВЛЕНИЕ XINETD

xinetd выполняет определенные действия при получении определенных сигналов. Действия ассоциированные с соответствующими сигналами могут быть переопределены путем редактирования config.h и последующей компиляции.

SIGUSR1
вызывает мягкую переконфигурацию, это означает что xinetd перечитывает файл конфигурации и подстраивается под изменения.
SIGUSR2
вызывает жесткую переконфигурацию, это значит то же самое что и мягкая переконфигурация за исключением того что все серверы для сервисов которые стали недоступны принудительно завершаются. Контроль доступа заново выполняется для выполняющихся серверных процессов, путем проверки удаленного хоста, времени доступа и количества выполняющихся серверов. Если число выполняющихся процессов превышает заданное, произвольным образом выбранные процессы убиваются что бы число оставшихся удовлетворяло поставленному условию. Так же если флаг INTERCEPT был сброшен или установлен, все серверы обеспечивающие этот сервис завершаются. Все это выполняется для того что бы после жесткой реконфигурации не осталось не одного работающего процесса обрабатывающего запросы с адресов не соответствующих критериям контроля доступа. .
SIGQUIT
приводит к завершению программы.
SIGTERM
завершает все выполняющиеся серверы перед завершением xinetd.
SIGHUP
приводит к генерации дампа внутреннего состояния (по умолчанию файл дампа /tmp/xinetd.dump; что бы сменить отредактируйте config.h и перекомпилируйте).
SIGIOT
вызывает проверку внутренней целостности что бы проверить что структуры данных используемые программой не повреждены. После завершения проверки xinetd генерирует сообщение о результате проверки.
При реконфигурации лог-файлы закрываются и вновь открываются. Это позволяет удалять старые логи.

http://lantan.chat.ru/xinetd.conf.html - конфигурирование, более чем достаточно.

3. Управление Internet-службами → Управление сетевыми службами: описание демона xinetd
4. Суперсервер и IPv6
5. Миграция с inetd на xinetd


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 24 апр 2012, 00:38 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Olej писал(а):


Olej писал(а):
Заметно поменялось что? 2 пункта:
- адаптировать это не под строго выдерживающую стандарты POSIX OS QNX, а под "колхозную" OS Linux, где к стандартам API достаточно вольное отношение...
- всё это использовать не через inetd, а через xinetd, который за эти годы стал постфактум-стандарт в Linux.


Итак, по п.1
Программный код того, что станет теперь полноценным TCP сервером станет выглядеть так:
Код:
#include <iostream>
#include <iomanip>
using namespace std;
#include <stdlib.h>
#include <stdio.h>

int main( void ) {
   char buf[ 80 ];
   // установить построчный режим ввода, но и это не обязательно…
   setvbuf( stdout, NULL, _IOLBF, 0 ); // или setlinebuf( stdout );
   while( true ) {
      cin >> buf;
      cout << buf << endl;
   }
   return EXIT_SUCCESS;
}

- всё! это параллельный многопоточный (точнее многопроцессный - fork) сервер, пока только эхо-сервер;
- я его специально выписал на С++, чтобы: а). смешнее было, б). чтоб соответствовало старой редакции, но в). более того, чтобы проследить прозрачность через большее число подключаемых .so библиотек.
- и не нужно вам, товарищи программисты, уродоваться с сокетами и их параметрами ;-)

Теперь дополнительно:

1. в конец где-то /etc/services допишем
Код:
[olej@notebook etc]$ tail -n2 /etc/services 
mycopy          50000/tcp               #my echo service
mycopy          50000/udp              #my echo service

- теперь мы определили новую сетевую службу (даже 2).

2. в каталоге /etc/xinetd.d создадим новый файл (имя его, предполагаю, не имеет никакого значения), пока в него достаточно вписать:
Код:
[root@notebook xinetd.d]# cat /etc/xinetd.d/mycopy
service mycopy
{
    disable = no
    protocol = tcp
    wait = no
    user = olej
    server = /home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/my.net/inetd/mycopy
}

- это весьма грубо, особенно относительно пути server, да и user тоже ... но мы это обыграем попозже...

3. запускаем или перезапускаем сам xinetd:
Код:
[root@notebook xinetd.d]# /etc/init.d/xinetd restart
Restarting xinetd (via systemctl):                         [  OK  ]
[root@notebook xinetd.d]# ps -A | grep xinetd
12507 ?        00:00:00 xinetd


4. если нужно заставить xinetd перечитать конфигурацию (подправляли /etc/xinetd.d/mycopy), посылаем ему сигнал :
Код:
[root@notebook xinetd.d]# kill -SIGHUP 12507
[root@notebook xinetd.d]# ps -A | grep xinetd
12507 ?        00:00:00 xinetd

- в этом месте в многих описаниях xinetd ошибка, или описания к старым версиям, или к другим ОС ... здесь всё как у inetd.

Большинство этих действий потребуют прав root!

Теперь мы готовы работать со своим сервером:
Код:
[olej@notebook ~]$ telnet 127.0.0.1 50000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
123
123
asdf
asdf
^]

telnet> close
Connection closed.


P.S. изменения относительно 10-летней давности - малозначительны! ;-)


Вложения:
my.net.tgz [3.75 КБ]
Скачиваний: 441
Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 25 апр 2012, 01:58 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Olej писал(а):
- и не нужно вам, товарищи программисты, уродоваться с сокетами и их параметрами ;-)


В соседней здесь теме много серверов хороших и разных один из вариантов сервера - на использовании xinetd. Тестирование времени реакции (а там используется наихудший случай, когда сервер подымается на одну ретрансляцию после чего обрубает соединение, как это делает HTTP-сервер) даёт значение в 10 раз хуже, но самого наилучшего случая, когда параллельный сервер обрабатывает запросы в потоках! Для многих и многих практических целей это вполне достаточный результат.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 27 апр 2012, 21:08 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Olej писал(а):


Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.
Вложение:
TcpSimpl-new.tgz [25.19 КБ]
Скачиваний: 468

- это текст.


Вложение:
xinetd.1.tgz [135.04 КБ]
Скачиваний: 473

- а это архив примеров.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 05 май 2012, 16:38 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Olej писал(а):
Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.

Статью В.Костромин выложил в публикациях сайта: "Сеть IP — когда писать программы лень".


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 05 май 2012, 18:02 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
Olej писал(а):
Olej писал(а):
Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.

Статью В.Костромин выложил в публикациях сайта: "Сеть IP — когда писать программы лень".


+ показал обсуждение этой публикации на LOR.

Как им статья попала в обсуждение + то, что эта гопота с LOR вообще что-то читает, кроме себя любимых в своей тусне, (ну, на худой конец, хоть бы газеты ... в клозете ;-) ) - это для меня стало большой неожиданностью ;-)

Но то, что там из публики LOR 7 отзывов на сейчас высказаны типа:
Цитата:
Познавательно.

- уже хорошо, не зря я этот текст перелопачивал - как минимум, 7-м человекам это как-то на пользу пригодится.

Но на что обратило внимание это обсуждение в LOR, это то, что они так и не поняли, что этот текст делался - исключительно для программиста-разработчика, а никак не на администратора или какого-то юзера... Именно разработчику, в качестве напоминания, как простейшим путём и минимальными затратами наделать себе тест-серверов, которые будут "подыгрывать" нужные ответы в ходе разработки программ реального сетевого проекта.

Этот текст первоначально и был написан по ходу разработки реального ("железного") проекта в QNX (где средств тестирования и диагностики будет поменьше доступных) ... Если кому приходилось ездить пригородным ж/д сообщением в Севастополе, Одессе, Львове - то вот те турникеты, которые считывают и регистрируют штрих-кодовые билетики, и контролируют их совместно с сервером продаж
билетов - это и есть тот проект, при отработке которого на разных его этапах массово использовались вот такие подыгрывающие сервера, замещающие реальные но отсутствующие компоненты системы. Вот такой техникой тест-серверов удалось очень сильно подтолкнуть развитие того проекта. И вот тогда в полу-шутку и была написана эта статья.

Я теперь смотрю, что в ней ни слова не сказано в качестве какого инструмента предлагается посмотреть на эту технику.
И в этом моё упущение, конечно.
Потому, что когда на LOR пишут, что в качестве сервера можно и утилиту cat использовать, то они совершенно правы ... в своём видении предмета. Но в качестве инструмента, применительно к предполагаемой области использования, здесь совершенно "до фени" кого использовать, вопрос здесь в том как использовать!


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 29 окт 2012, 22:29 
Не в сети
Писатель

Зарегистрирован: 24 окт 2012, 20:23
Сообщения: 23
Olej писал(а):
Потому, что когда на LOR пишут...
Дался вам этот LOR. Красивое название и никчёмная публика. Может мы вернёмся к теме дистрибутива для персонального суперкомпьютера?


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 30 окт 2012, 16:25 
В сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9461
Откуда: Харьков
homecluster писал(а):
Olej писал(а):
Потому, что когда на LOR пишут...

Дался вам этот LOR. Красивое название и никчёмная публика.

Мне "до фени" конкретно LOR ... как, впорочем, и всякий другой околокомпьютерный тусняк.
Мне интересно только позитивные отзывы, и то, что предлагаемые мной к обсуждению программные техники оказались полезны и интересны хотя бы одному разработчику.

homecluster писал(а):
Может мы вернёмся к теме дистрибутива для персонального суперкомпьютера?

Вернёмся :lol: ... : Помогите поднять кластер.
Только разговор принимает такой оборот, что тема для такого обсуждения должна бы быть другая и называться по-другому.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Olej и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.032s | 21 Queries | GZIP : On ]