2016-04-14 4 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 :: Socket :: INET

Кто-то может объяснить мне в чем проблема? Думаю, речь идет не о привилегиях пользователей.

+1

Что именно вы ожидаете от этого? Что вы подразумеваете под «это работает» в терминале? Как вы это называете в своем браузере? – stevieb

+0

$ perl test.pl от терминала он работает. из браузера я пытаюсь выполнить его через php-функцию, например exec() shell_exec() syste(). –

+2

«не удалось связать и т. Д. ...» - '$!' (Т. Е. '$ 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') не является опечаткой; вот где модули в семействе IO :: * обычно сообщают об ошибках. Это сбивает с толку, но [будет трудно изменить на данном этапе] (https://rt.perl.org/Public/Bug/Display.html?id=120764). – ThisSuitIsBlackNot

+0

Я решил, спасибо, поскольку я зарегистрировал ошибки, у меня есть проблемы с разрешением. –

+0

Я не уверен, как сказать, что это SELinux или что-то еще. Если это SELinux, есть способы сообщить об этом, чтобы разрешить создание сокета. Googling должен найти это довольно легко. – ikegami

Смежные вопросы