zep Опубликовано 28 декабря, 2010 Всем привет. Столкнулся с проблемой. Не могу получить и отправить данные в UDP сокет из Perl скрипта, сквозь Xinetd. Конфиг Xinetd: service check_state { disable = no port = 30001 socket_type = dgram protocol = udp wait = yes user = root server = /scripts/check_state.pl #env = HOME=/var/cvs } Perl код: #!/usr/bin/perl use IO::Handle; use IO::Socket; use Socket; if (-S STDIN) { system("echo 'is sock' >> /tmp/xinetd.log"); } else { exit; } my $sock = IO::Socket->new_from_fd(\*STDIN,"+<") or die "$!"; STDIN->fdopen($sock,"<") || die $!; STDOUT->fdopen($sock,">") || die $!; STDERR->fdopen($sock,">") || die $!; print "test"; #$sock->send("test"); exit; Итог: клиент данных не получает. У кого-нибудь есть опыт в данном случае?? Заранее спасибо П.С. В режиме TCP сервера - писал. Там проблем не возникло. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
marikoda Опубликовано 28 декабря, 2010 (изменено) попробуйте вместо xinetd использовать netcat Изменено 28 декабря, 2010 пользователем marikoda Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 28 декабря, 2010 попробуйте вместо xinetd использовать netcat У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 28 декабря, 2010 Google-Fu! http://www.mail-archive.com/beginners@perl.org/msg39525.html Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 28 декабря, 2010 Google-Fu!http://www.mail-archive.com/beginners@perl.org/msg39525.html Я видел. Гуглил два дня. По вашей ссылке ему ответили http://www.mail-archive.com/beginners@perl.org/msg39530.html Сравните с моим кодом... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
marikoda Опубликовано 28 декабря, 2010 попробуйте вместо xinetd использовать netcat У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8) Если истина вдруг не появится, можно вообще написать демона на питоне (чисто из соображений тренировки в кодинге) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 29 декабря, 2010 попробуйте вместо xinetd использовать netcat У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8) Если истина вдруг не появится, можно вообще написать демона на питоне (чисто из соображений тренировки в кодинге) Тогда уже можно накодить на Perl. :)У меня даже где-то рабочий пример был. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 29 декабря, 2010 ищите в гугле "udprelay" Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 4 января, 2011 Тогда уже можно накодить на Perl. :)У меня даже где-то рабочий пример был. Если вас не затруднит, не могли бы найти свой пример? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 4 января, 2011 #!/usr/bin/perl use strict; use threads; use IO::Socket; my $pid = fork(); if ($pid == 0) { my $sock = new IO::Socket::INET ( LocalHost => '0.0.0.0', LocalPort => '7070', Proto => 'tcp', Listen => 1, Reuse => 1); die "Could not create socket: $!\n" unless $sock; while (my $client = $sock->accept()) { $client->autoflush(1); my $sockthread = threads->new(\&accept_connection,$client); $sockthread->detach; } sub accept_connection { my $client = $_[0]; print $client ">> "; while (<$client>) { my $message = $_; print "Got command: $message"; open FH, "$message |"; while () { print $client $_; } print $client ">> "; } return; } } Тупенький шелл, и на TCP. Зато многопоточный. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 4 января, 2011 ТСР понятно. А вот UDP как?? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 4 января, 2011 ТСР понятно. А вот UDP как?? Я аналогично пробовал с UDP - все так же. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...