我有一個任務,我在一個線程中等待連接並將它們轉發到另一個線程。 也許我誤解了一些東西,但爲什麼我不能在主線程中重新打開文件描述符?線程之間轉發/傳遞文件描述符
非常簡化的代碼:
sub inthread {
$socket = new IO::Socket::INET (...);
# ...
while (my $client = $socket->accept()) {
#if i print STDOUT, (fileno $client); # there i'll get 4
push (@shared, fileno $client);
}
}
sub mainthread {
if (scalar @shared) {
$fd = shift @shared;
# if i print (fileno $fd); # there i'll get 4
open my $f, "<&=$fd" or die " error $!"; ### error here: Can't open 4: Bad file descriptor
while (<$f>) { ... }
}
}
threads->create(\&inthread);
while(1) { mainthread; }
整個代碼是有http://dpaste.com/3381RKV
測試:
perl -w ./testcode.pl --port=10102 & wget -O - http://127.0.0.1:10102/
注意:總是'use use strict;使用警告'all';'!你有許多不正確的範圍變量,這會幫助你發現這些問題。 – ikegami
注意:'<'應該是'+ <'這裏。 – ikegami
@ikegami相同 –