我有這個小腳本,它工作得很好,但有時候會失敗。它失敗2例:如何在我的Perl TCP腳本中診斷「無法確定對等地址」?
錯誤發送:
Cannot determine peer address at ./tcp-new.pl line 52
沒有輸出或任何東西,只不過沒有帶來它得到了連接TCP客戶端。通常發生在我從服務器斷開連接後,回家並重新連接。要解決此重新啓動是必需的,它開始工作。有時,這個問題後面是問題點提到的1
注:當我拔下這不是問題的時間(除非錯誤NR 1情況),短量內再次重新連接。
那麼,任何人都可以幫助我讓這段代碼更穩定一點,所以我不必每天都重新啓動它?
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use IO::Select;
my $tcp_port = "10008";
my $udp_port = "2099";
my $tcp_socket = IO::Socket::INET->new(
Listen => SOMAXCONN, LocalPort => $tcp_port,
Proto => 'tcp', ReuseAddr => 1,
);
my $udp_socket = IO::Socket::INET->new(
LocalPort => $udp_port, Proto => 'udp',
);
my $read_select = IO::Select->new();
my $write_select = IO::Select->new();
$read_select->add($tcp_socket);
$read_select->add($udp_socket);
while (1) {
my @read = $read_select->can_read();
foreach my $read (@read) {
if ($read == $tcp_socket) {
my $new_tcp = $read->accept();
$write_select->add($new_tcp);
} elsif ($read == $udp_socket) {
my $recv_buffer;
$udp_socket->recv($recv_buffer, 1024, undef);
my @write = $write_select->can_write();
foreach my $write (@write) {
$write->send($recv_buffer);
}
}
}
}
你可以更具體地說我怎麼能做到這一點。我沒有經驗與perl和tcp/udp選擇,所以我聽到你在說什麼,但不知道如何實現。 – MadBoy 2010-02-22 15:54:37