2016-04-14 15 views
0
#!/usr/bin/perl 

use warnings; use strict; 

use IO::Socket::INET; 

our $local_host = "0.0.0.0"; 
our $local_port = "14267"; 


$SIG{'CHLD'} = 'IGNORE'; 
my $bind = IO::Socket::INET->new(
         Listen=>5, 
         LocalAddr=>$local_host.':'.$local_port, 
         ReuseAddr=>1) 
         or die print('Could not bind: ' .$local_host.':'.$local_port); 

私はそれが動作する端末から、このコードを実行しようとするが、私は、ブラウザからそれを実行しようとすると、それはバインドできませんでした戻るなどPerlのIO ::ソケット:: INET

誰かに説明することができます私の問題は何ですか?私の思うようなユーザー特権ではありません。

+1

これは何をする予定ですか?ターミナルで "それは動作する"とはどういう意味ですか?あなたのブラウザからこれをどのように呼びますか? – stevieb

+0

$ perl test.plは端末から動作します。ブラウザから私はexec()shell_exec()syste()のようなPHP関数を通して実行しようとします。 –

+2

"could not bind etc etc ...." - '$!'(つまり '$ ERRNO')には、この問題に関する詳細が含まれていなければなりません。あなたのコードに出力し、あなたの質問に出力してください。 –

答えて

2

どのようにバインドできなかったのでしょうか?どのようなエラーが発生した場合でも、常に「バインドできませんでした」というログを記録します。さらに重要なのは、エラーが発生したことを記録していないことです。最初のステップはそれを修正することです。

#!/usr/bin/perl 

use warnings; use strict; 

use IO::Socket::INET; 

my $local_port = 14267; 

my $server_socket = IO::Socket::INET->new(
    LocalPort => $local_port, 
    Listen => 5, 
    ReuseAddr => 1, 
) 
    or die("Can't create server socket: [email protected]"); # <-- The relevant change. 

SElinuxのようなセキュリティフレームワークのために、何らかのパーミッションエラーが発生すると思われます。

+0

好奇心を抱く '$ @'(最後の 'eval'からのエラーメッセージのために通常使用されます)はtypoではありません。 IO :: *ファミリのモジュールは一般的にエラーを報告します。混乱しますが、[この時点で変更するのは難しいでしょう](https://rt.perl.org/Public/Bug/Display.html?id=120764)。 – ThisSuitIsBlackNot

+0

私はエラーを記録したので、私は解決しました、ありがとう、私は許可の問題があります。 –

+0

私はそれがSELinuxかどうかを知る方法がわかりません。 SELinuxの場合は、ソケットの作成を許可する方法があります。グーグルはこれをかなり簡単に見つけるはずです。 – ikegami

関連する問題