Перейти к содержимому
Калькуляторы

Xinetd + UDP + Perl. Пишем сервер UDP под управлением Xinetd

Всем привет. Столкнулся с проблемой. Не могу получить и отправить данные в 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 сервера - писал. Там проблем не возникло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте вместо xinetd использовать netcat

 

Изменено пользователем marikoda

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте вместо xinetd использовать netcat

У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я видел. Гуглил два дня. По вашей ссылке ему ответили http://www.mail-archive.com/beginners@perl.org/msg39530.html

Сравните с моим кодом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте вместо xinetd использовать netcat

У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8)

Если истина вдруг не появится, можно вообще написать демона на питоне (чисто из соображений тренировки в кодинге)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте вместо xinetd использовать netcat

У меня уже есть такие же решения под Xinetd, только по TCP. Я считаю, лучше разобраться с данной задачей из соображения незахламления сервера кучами сервисов. Истина где-то рядом... 8)

Если истина вдруг не появится, можно вообще написать демона на питоне (чисто из соображений тренировки в кодинге)

Тогда уже можно накодить на Perl. :)

У меня даже где-то рабочий пример был.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ищите в гугле "udprelay"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда уже можно накодить на Perl. :)

У меня даже где-то рабочий пример был.

Если вас не затруднит, не могли бы найти свой пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#!/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. Зато многопоточный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ТСР понятно. А вот UDP как??

Я аналогично пробовал с UDP - все так же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.