使用“inet_res”库的 Elixir 错误
Elixir errors using `inet_res` library
我在使用 Erlang 的 inet_res
时遇到了一些问题。我尝试在我的 Elixir shell 和我的 Erlang shell 中使用它,但我有意想不到的行为。有时我能够查找域,有时我没有 return 值:
iex(1)> :inet_res.lookup('disneur.me', :in, :mx)
[]
iex(2)> :inet_res.lookup('disneur.me', :in, :mx)
[]
iex(3)> :inet_res.lookup('disneur.me', :in, :mx)
[{1, 'aspmx.l.google.com'}, {10, 'alt3.aspmx.l.google.com'},
{10, 'alt4.aspmx.l.google.com'}, {5, 'alt1.aspmx.l.google.com'},
{5, 'alt2.aspmx.l.google.com'}]
如您所见,我调用它的前两次 return 生成了一个空数组,第三次 return 生成了良好的值。
我尝试添加第 4 个参数 retry: 5
和 timeout: 10
但它没有帮助:
:inet_res.lookup('disneur.me', :in, :mx, timeout: 10, retry: 5)
[]
iex(2)> :inet_res.lookup('disneur.me', :in, :mx, timeout: 10, retry: 5)
[{1, 'aspmx.l.google.com'}, {10, 'alt3.aspmx.l.google.com'},
{10, 'alt4.aspmx.l.google.com'}, {5, 'alt1.aspmx.l.google.com'},
{5, 'alt2.aspmx.l.google.com'}]
我也直接从 erlang shell 尝试过,我有完全相同的行为:
1> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
2> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
3> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
4> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[{1,"aspmx.l.google.com"},
{10,"alt3.aspmx.l.google.com"},
{10,"alt4.aspmx.l.google.com"},
{5,"alt1.aspmx.l.google.com"},
{5,"alt2.aspmx.l.google.com"}]
你知道我为什么会有这种不可预知的行为吗?我使用这个库的方式不对吗?
编辑:
有关信息,我尝试使用其他域(即:gmail.com),但我遇到了同样的问题。其他人也在他们自己的计算机上和不同位置尝试了此代码。我在 Circle-CI.
上也有同样的失败
编辑2:
copy-paste 来自我在 Slack(Elixir 团队)上的一次讨论
troush [8:45 PM] 它在我的域中运行良好。也许这个问题特定于域?
kdisneur [晚上 8:47]
你试过几次了吗?我的意思是杀了你 session 并重试,因为有时有效,有时无效。
胡思乱想 [8:54 PM]
iex(35)> :inet_res.lookup('google.com', :in, :mx)
[{30, 'alt2.aspmx.l.google.com'}, {40, 'alt3.aspmx.l.google.com'},
{50, 'alt4.aspmx.l.google.com'}, {10, 'aspmx.l.google.com'},
{20, 'alt1.aspmx.l.google.com'}]
iex(36)> :inet_res.lookup('google.com', :in, :mx)
[{40, 'alt3.aspmx.l.google.com'}, {50, 'alt4.aspmx.l.google.com'},
{10, 'aspmx.l.google.com'}, {20, 'alt1.aspmx.l.google.com'},
{30, 'alt2.aspmx.l.google.com'}]
iex(37)> :inet_res.lookup('google.com', :in, :mx)
[{50, 'alt4.aspmx.l.google.com'}, {10, 'aspmx.l.google.com'},
{20, 'alt1.aspmx.l.google.com'}, {30, 'alt2.aspmx.l.google.com'},
{40, 'alt3.aspmx.l.google.com'}]
troush [8:55 PM]可能是连接问题。
kdisneur [8:56 PM] 是的,当你在 session 中并且它工作一次时,我得到的结果与你相同。这就是为什么我要问关于重新启动一个新的 Elixir shell
troush [8:59 PM]哦,好的,我明白了。是的,我在广泛的新 iex session 上遇到了这个问题。空响应,但仅限于您的域。在 gmail/google.com 上它工作得很好
troush [9:01] 我的自定义域也遇到了同样的问题。所以这里有一些问题:simple_smile:对不起,不和谐
所以我认为它不是来自我的网络或特定域。我认为这真的与我使用该库的方式有关。
感谢您的帮助
这是一个竞争条件。您正在从尚不存在的事物中请求数据。在 VM 初始化时 inet_db 需要获取解析器列表。您正在该过程完成之前进行该查询。
至'fast-track':
iex(1)> :inet_db.add_ns({4,2,2,1}) ; :inet_res.lookup('disneur.me', :in, :mx)
[{10, 'alt3.aspmx.l.google.com'}, {10, 'alt4.aspmx.l.google.com'},
{5, 'alt1.aspmx.l.google.com'}, {5, 'alt2.aspmx.l.google.com'},
{1, 'aspmx.l.google.com'}]
我在使用 Erlang 的 inet_res
时遇到了一些问题。我尝试在我的 Elixir shell 和我的 Erlang shell 中使用它,但我有意想不到的行为。有时我能够查找域,有时我没有 return 值:
iex(1)> :inet_res.lookup('disneur.me', :in, :mx)
[]
iex(2)> :inet_res.lookup('disneur.me', :in, :mx)
[]
iex(3)> :inet_res.lookup('disneur.me', :in, :mx)
[{1, 'aspmx.l.google.com'}, {10, 'alt3.aspmx.l.google.com'},
{10, 'alt4.aspmx.l.google.com'}, {5, 'alt1.aspmx.l.google.com'},
{5, 'alt2.aspmx.l.google.com'}]
如您所见,我调用它的前两次 return 生成了一个空数组,第三次 return 生成了良好的值。
我尝试添加第 4 个参数 retry: 5
和 timeout: 10
但它没有帮助:
:inet_res.lookup('disneur.me', :in, :mx, timeout: 10, retry: 5)
[]
iex(2)> :inet_res.lookup('disneur.me', :in, :mx, timeout: 10, retry: 5)
[{1, 'aspmx.l.google.com'}, {10, 'alt3.aspmx.l.google.com'},
{10, 'alt4.aspmx.l.google.com'}, {5, 'alt1.aspmx.l.google.com'},
{5, 'alt2.aspmx.l.google.com'}]
我也直接从 erlang shell 尝试过,我有完全相同的行为:
1> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
2> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
3> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[]
4> inet_res:lookup("disneur.me", in, mx, [{timeout, 10}, {retry, 5}]).
[{1,"aspmx.l.google.com"},
{10,"alt3.aspmx.l.google.com"},
{10,"alt4.aspmx.l.google.com"},
{5,"alt1.aspmx.l.google.com"},
{5,"alt2.aspmx.l.google.com"}]
你知道我为什么会有这种不可预知的行为吗?我使用这个库的方式不对吗?
编辑: 有关信息,我尝试使用其他域(即:gmail.com),但我遇到了同样的问题。其他人也在他们自己的计算机上和不同位置尝试了此代码。我在 Circle-CI.
上也有同样的失败编辑2: copy-paste 来自我在 Slack(Elixir 团队)上的一次讨论
troush [8:45 PM] 它在我的域中运行良好。也许这个问题特定于域?
kdisneur [晚上 8:47] 你试过几次了吗?我的意思是杀了你 session 并重试,因为有时有效,有时无效。
胡思乱想 [8:54 PM]
iex(35)> :inet_res.lookup('google.com', :in, :mx)
[{30, 'alt2.aspmx.l.google.com'}, {40, 'alt3.aspmx.l.google.com'},
{50, 'alt4.aspmx.l.google.com'}, {10, 'aspmx.l.google.com'},
{20, 'alt1.aspmx.l.google.com'}]
iex(36)> :inet_res.lookup('google.com', :in, :mx)
[{40, 'alt3.aspmx.l.google.com'}, {50, 'alt4.aspmx.l.google.com'},
{10, 'aspmx.l.google.com'}, {20, 'alt1.aspmx.l.google.com'},
{30, 'alt2.aspmx.l.google.com'}]
iex(37)> :inet_res.lookup('google.com', :in, :mx)
[{50, 'alt4.aspmx.l.google.com'}, {10, 'aspmx.l.google.com'},
{20, 'alt1.aspmx.l.google.com'}, {30, 'alt2.aspmx.l.google.com'},
{40, 'alt3.aspmx.l.google.com'}]
troush [8:55 PM]可能是连接问题。
kdisneur [8:56 PM] 是的,当你在 session 中并且它工作一次时,我得到的结果与你相同。这就是为什么我要问关于重新启动一个新的 Elixir shell
troush [8:59 PM]哦,好的,我明白了。是的,我在广泛的新 iex session 上遇到了这个问题。空响应,但仅限于您的域。在 gmail/google.com 上它工作得很好
troush [9:01] 我的自定义域也遇到了同样的问题。所以这里有一些问题:simple_smile:对不起,不和谐
所以我认为它不是来自我的网络或特定域。我认为这真的与我使用该库的方式有关。
感谢您的帮助
这是一个竞争条件。您正在从尚不存在的事物中请求数据。在 VM 初始化时 inet_db 需要获取解析器列表。您正在该过程完成之前进行该查询。
至'fast-track':
iex(1)> :inet_db.add_ns({4,2,2,1}) ; :inet_res.lookup('disneur.me', :in, :mx)
[{10, 'alt3.aspmx.l.google.com'}, {10, 'alt4.aspmx.l.google.com'},
{5, 'alt1.aspmx.l.google.com'}, {5, 'alt2.aspmx.l.google.com'},
{1, 'aspmx.l.google.com'}]