Как я могу принять несколько соединений TCP в Perl?

У меня проблема со скриптом Perl для Linux. Это'Основная цель - быть посредником между 3 приложениями. Что он должен делать:

Он должен быть в состоянии ждать UDP-текст (без пробелов) на$udp_portКогда он получает этот текст UDP, он должен переслать его на подключенный TCP-клиент

Проблема в том, что мое приложение работает до тех пор, пока я не отключусь от TCP-клиента в первый раз. Тогда я не могу подключиться к нему больше, и время ожидания истекает после получения следующего пакета UDP на$udp_port, Таким образом, в основном, когда я хочу восстановить соединение с TCP, я должен перезапустить приложение.

Все это должно быть максимально быстрым (считается каждая миллисекунда). Текст, отправленный в UDP или TCP, нет содержит пробелы. Это'необязательно иметь возможность поддерживать несколько TCP-клиентов одновременно, но это, безусловно, будет преимуществом :-)

Вот'мой текущий код:

#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket;
use Net::hostent;
use threads;
use threads::shared;

my $tcp_port = "10008";  # connection from TCP Client
my $udp_port = "2099";  # connection from Announcer
my $udp_password = ""; # password from Announcer
my $title = "Middle Man server version 0.1";
my $tcp_sock = IO::Socket::INET->new( Proto => 'tcp', LocalPort => $tcp_port, Listen => SOMAXCONN,Reuse => 1)|| die @!;
my $udp_sock = new IO::Socket::INET(LocalPort => $udp_port, Proto => "udp") || die @!;

my (@threads);

print "[$title]\n";

sub mySubTcp($)
{
  my ($popup) = @_;

  print "[TCP][CLIENT CONNECTED]\n";
  while (my $answer = )
  {
chomp $answer;
my ($pass, $announce) = split ' ', $answer;
print $answer . '\n';
  }
  printf "[TCP][CLIENT DISCONNECTED]\n";
}

my $client = $tcp_sock->accept();
$client->autoflush(1);


my $thr = threads->new(\&mySubTcp, $client);


while ($udp_sock->recv(my $buf, 1024))
{
  chomp $buf;

  my $announce = $buf;
    print "[ANNOUNCE] $announce [START]\n";
    print $client $announce . "\n";
    print "[ANNOUNCE] $announce [END]\n";

}

Вот's код, который я попытался после нескольких предложений, чтобы пойти без потоков. Проблема даже в том, что я могу соединиться с TCP Client msg "Попытка настроить UDP никогда не отображается. Вероятно, что-то яЯ делаю неправильно. Клиент tcp просто подключается и ждет, пока сервер отправит некоторые данные. Прибывает ноне принимаются. Вот's код:

#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use Net::hostent;
use threads;
use threads::shared;

my $tcp_port = "10008";  # connection from Tcp
my $udp_port = "2099";  # connection from Announcer

my $title = "Middle Man server version 0.2";
my $tcp_sock = IO::Socket::INET->new( Proto => 'tcp', LocalPort => $tcp_port, Listen => SOMAXCONN,Reuse => 1)|| die @!;

my (@threads);

print "[$title]\n";

for (;;)
{
    my $open_socket = $tcp_sock->accept();
    print "[TCP][CLIENT CONNECTED]\n";
    while (my $input = )
    {
    print "Trying to setup UDP\n";
    my $udp_sock = new IO::Socket::INET(LocalPort => $udp_port, Proto => "udp") || die @!;
    while ($udp_sock->recv(my $buf, 1024)) {
          chomp $buf;
          print "\[ANNOUNCER\] $buf \[START\]\n";
          print $open_socket $buf . "\n";
          print "\[ANNOUNCER\] $buf \[END\]\n";
    }
    print "Closing UDP\n";
    close $udp_sock;
    #chomp $input;
    #print $input;
}

    close $open_socket;
    printf "[TCP][CLIENT DISCONNECTED]\n";
}

Ответы на вопрос(5)

Ваш ответ на вопрос