Forum Webscript.Ru
Программирование => Perl => Тема начата: Skif от 11 Февраля 2007, 13:10:26
-
Сабж.
необходимо для проэкта написать своего демона, который бы слушал порт, принимал сообщения, работая по определенному алгоритму,но получаю маленький затык, на этапе простой отправки приема данных:
#!/usr/bin/perl -w
use IO::Socket;
#use strict;
use POSIX;
require \'sys/syscall.ph\';
my $sock = IO::Socket::INET->new(LocalAddr => \'127.0.0.1\',
LocalPort => \'2727\',
Listen => 15,
Type => SOCK_STREAM,
Proto => \'tcp\');
fork() && exit;
close STDOUT; close STDERR; close STDIN;
chdir \'/tmp\';
syscall(&SYS_setsid);
$SIG{\'INT\'} = $SIG{\'QUIT\'} = $SIG{\'TERM\'} = \'quit\';
$SIG{\'HUP\'} = \'ignore\';
$SIG{CHLD} =\\&REAPER;
while (1){
while(my $client = $sock->accept()){
print $sock "My Net Daemon! Hello!\\n";
my $ddd = <$sock>;
print $sock $ddd;
#`echo $ddd>>/tmp/sk.s `;
}
}
#sleep 20;
#exit(0);
close($sock);
########### SUBs
sub REAPER {
1 until (-1 == waitpid(-1,WNOHANG));
$SIG{CHLD} =\\&REAPER;
}
Скрипт в демона превращается без проблем. На данном этапе fork для каждого нового подключения мне не нужен, потому его убрал. Суть не в этом.
Согласно кода, у меня в случае подключения к порту 2727 должно в окно терминала выкинуть "My Net Daemon! Hello!\\n". проверяю обычным telnet-ом:
[root@fbsd2.home] /usr/local/script/Dpm/tmp :./s_s_server.pl
[root@fbsd2.home] /usr/local/script/Dpm/tmp :telnet localhost 2727
Trying 127.0.0.1...
Connected to localhost.
Escape character is \'^]\'.
Killed
[root@fbsd2.home] /usr/local/script/Dpm/tmp :
Может кто подсказать, как правильно слать данные и принимать? У меня через дискрипторы не получается, send/recv тоже не идут, правда я мог с флагами напутать. Пока роюсь в этом направлении
-
http://gelin.omsktele.com/text/trans/perlipc.html#TCP_Servers_with_IO::Socket
-
Спасибо за ссылку, сейчас пробую :)
-
То, что доктор прописал. Огромное спасибо!
-
А поделиться как бинарник послать, можете? Суть в чем. перевести дискриптор в binmode то я могу, а вот дальше как быть? как вернуть в текстовый формат, или на двоичку/хексы переходить? Иначе никак?
-
Да, про UUE и Base64 знаю. Вот только у меня раз в 15 минут формируется файл размером в пол метра. после упаковки он сжимается до 40 кил, если обработать UUE или B64 то размер файла растет до 80 и 59 кил соответственно. В общем надоть снизить паразитный траффик :)
-
Вопрос снят - туплю. Проспался и все стало на свои места