URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5149
[ Назад ]

Исходное сообщение
"запуск сервера через inetd"

Отправлено aborilov , 15-Фев-06 16:04 
привет!
написал простой tcp-сервер на perl, который вешается на порт и принимает подключения...
хочу что бы он не висел как демон а только запускался при когда ето надо, и если приходит другое подключение то запускалась его копия, короче через inetd.
прописал в inetd.conf, в  service, все ОК! но когда пытаюсь подключиться, сервак то пытается повеситься на порт, а там уже слушает inetd
что делать? может не надо вешать сервак на порт? а от куда тогда брать данные от клиента?

Содержание

Сообщения в этом обсуждении
"запуск сервера через inetd"
Отправлено Wulf , 15-Фев-06 16:30 
>привет!
>написал простой tcp-сервер на perl, который вешается на порт и принимает подключения...
>
>хочу что бы он не висел как демон а только запускался при
>когда ето надо, и если приходит другое подключение то запускалась его
>копия, короче через inetd.
>прописал в inetd.conf, в  service, все ОК! но когда пытаюсь подключиться,
>сервак то пытается повеситься на порт, а там уже слушает inetd
>
>что делать? может не надо вешать сервак на порт? а от куда
>тогда брать данные от клиента?

через inetd не надо слушать порт. Там надо делать 2 вещи:
1. при необходимости, отключить буферизацию у stdout.
2. читать и писать в stdin/stdout соответственно.
И не надо создавать сокетов и т.д. и т.п.


"запуск сервера через inetd"
Отправлено aborilov , 15-Фев-06 16:38 
>>привет!
>>написал простой tcp-сервер на perl, который вешается на порт и принимает подключения...
>>
>>хочу что бы он не висел как демон а только запускался при
>>когда ето надо, и если приходит другое подключение то запускалась его
>>копия, короче через inetd.
>>прописал в inetd.conf, в  service, все ОК! но когда пытаюсь подключиться,
>>сервак то пытается повеситься на порт, а там уже слушает inetd
>>
>>что делать? может не надо вешать сервак на порт? а от куда
>>тогда брать данные от клиента?
>
>через inetd не надо слушать порт. Там надо делать 2 вещи:
>1. при необходимости, отключить буферизацию у stdout.
>2. читать и писать в stdin/stdout соответственно.
>И не надо создавать сокетов и т.д. и т.п.


каким образомотключить буферизацию?


"запуск сервера через inetd"
Отправлено Wulf , 15-Фев-06 16:46 

>
>каким образомотключить буферизацию?

как обычно:
select(( select, $| = 1 )[0] );
иначе, интерактивность будет не очень.


"запуск сервера через inetd"
Отправлено aborilov , 15-Фев-06 16:56 

>
>как обычно:
>select(( select, $| = 1 )[0] );
> иначе, интерактивность будет не очень.

и еще вопросик:
а если мне надо принимать данные построчно, то как лучше делать?


"запуск сервера через inetd"
Отправлено Wulf , 15-Фев-06 17:41 

>и еще вопросик:
>а если мне надо принимать данные построчно, то как лучше делать?

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


"запуск сервера через inetd"
Отправлено aborilov , 16-Фев-06 12:04 
все ясно! разобрался! спасибо!

а как узнать ip с котрого пришел коннект?


"запуск сервера через inetd"
Отправлено aborilov , 16-Фев-06 12:44 
ОК! с ip все понятно!
я получаю строку вот так -
$line = <STDIN>;

как мне ограничить ограничить эту строку? т.е. получать только первые 20 символов! что бы не было переполнения


"запуск сервера через inetd"
Отправлено chip , 16-Фев-06 14:37 
>ОК! с ip все понятно!
>я получаю строку вот так -
>$line = <STDIN>;
>
>как мне ограничить ограничить эту строку? т.е. получать только первые 20 символов!
>что бы не было переполнения

Слышал звон, да не знаю где он. Какого переполнения? В данном случае не возникнет никакого переполнения.

Для чтения 20 символов используйте:
perldoc -f sysread

ps: и настоятельно рекомендую начать с perldoc perlintro


"запуск сервера через inetd"
Отправлено DeadMustdie , 16-Фев-06 20:33 
>что делать? может не надо вешать сервак на порт? а от куда
>тогда брать данные от клиента?

Не надо вешать. Данные брать с stdin, отправлять на stdout. Остальное - забота inetd.


"запуск сервера через inetd"
Отправлено aborilov , 16-Фев-06 21:33 
И вроде последний вопрос:
клиент приконекчивается, я жду от него строку
sysread(STDIN,128);

но так ждать я могу без конечно!
как сделать что бы сервак через определенное время отваливался?


"запуск сервера через inetd"
Отправлено rWizard , 19-Фев-06 18:15 
perldoc -f alarm
(пример в самом конце, из него всё понятно)

"запуск сервера через inetd"
Отправлено aborilov , 20-Фев-06 21:57 
>perldoc -f alarm
>(пример в самом конце, из него всё понятно)


Большое спасибо!