Erlang подключиться по внешнему IP-адресу - PullRequest
0 голосов
/ 17 января 2011

Пишу простое серверное приложение на эрланге.

Код этого приложения: https://gist.github.com/783117

Я пытаюсь подключиться к нему через telnet.Когда я подключаюсь к локальному или локальному IP-адресу, который получается по маршруту, это нормально, но когда я пытаюсь подключиться к серверу с внешним IP-адресом, это не работает.

Что не так?

Если я использую опции с {0,0,0,0}:

Opts = [binary, {ip, 0,0,0,0}, {reuseaddr, true},
            {keepalive, false}, {active, false}],

, я получаю:

исключение выхода: badarg

netstat -ltn |grep 110

tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN

route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 января 2011

Из gen_tcp Руководство :

listen (Port, Options) -> {ok, ListenSocket} | {ошибка, причина}

...

Устанавливает сокет для прослушивания порта Порт на локальном хосте.

...

{ip, ip_address ()}

Если хост имеет несколько сетевых интерфейсов, этот параметр указывает, какой из них прослушивать.

Полагаю, ваш сервер прослушивает только локальный хост. То есть вы не можете подключиться, используя другие адреса. Вам, вероятно, нужно использовать опцию ip. Возможно, можно использовать INADDR_ANY, как в C, но я не знаю.

[править]

Оказалось, что он слушает INADDR_ANY по умолчанию, даже без опции ip (благодаря I GIVE CRAP ANSWERS). И я могу подключиться с других машин с оригинальным кодом, предоставленным автором. Однако брандмауэр отключен на моей машине

0 голосов
/ 18 января 2011

Вместо {ip, 0,0,0,0} вы должны передать: {ip, {0,0,0,0}}. Вы передали кортеж с 5 элементами вместо кортежа из 2 элементов.

...