Как я могу получить IP-адрес клиента из вызова Perl Frontier-RPC? - PullRequest
1 голос
/ 21 января 2009

Я пытаюсь, чтобы мой демон Perl Frontier XML-RPC узнал об IP-адресе звонящего. Я должен сказать, что я новичок в Perl, так что, возможно, это очевидно. Я знаю, что Frontier :: Daemon наследуется от IO :: Socket :: INET , который имеет метод peeraddr(), но это не помогает мне, когда демон не передавать в своем экземпляре вызовы методов XML-RPC.

Вот как выглядит мой код, примерно:

    my $server = Frontier::Daemon->new(
        methods => {
                diff => \&diff,
        },
        LocalPort => 8080,
        ReuseAddr => 1,
    );

А потом внизу:

sub diff {
    return $_[0] - $_[1];
}

Как получить IP-адрес вызывающего абонента изнутри 'diff'?

Ответы [ 2 ]

1 голос
/ 22 января 2009

К сожалению, вы не можете сделать это, используя серверный класс Frontier. К тому времени, когда локальная процедура / метод вызывается, у вас уже нет дескриптора самого фактического соединения с сокетом.

Как оказалось, возможность доступа к этой информации является недавней возможностью, которую я добавил в класс сервера в своем пакете RPC :: XML . См. Раздел « Как называются методы » в документации по классу сервера.

0 голосов
/ 21 января 2009

Я запускаю Frontier :: Daemon и Frontier :: RPC2 (под Apache). Я не знаю, как получить IP-адрес клиента при использовании Frontier :: Daemon, но если вы используете Frontier :: RPC2, то переменная среды Apache $ ENV {REMOTE_ADDR} будет содержать IP-адрес клиента.

...