gpt4 book ai didi

erlang - 使用 `inet_res` 库时出现 Elixir 错误

转载 作者:行者123 更新时间:2023-12-02 06:54:16 24 4
gpt4 key购买 nike

我在使用 Erlang 的 inet_res 时遇到了一些问题。我尝试从 Elixir shell 和 Erlang shell 中使用它,但出现了意外的行为。有时我能够查找域,有时我没有返回值:

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'}]

正如你所看到的,我前两次调用它,它返回了一个空数组,第三次,它返回了正确的值。

我尝试添加第四个参数重试:5以及超时: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:复制粘贴我在 Slack(Elixir 团队)上进行的讨论

troush [8:45 PM] 它在我的域中运行良好。也许这个问题是特定领域的?

kdisneur [8:47 PM]你尝试过几次吗?我的意思是终止您的 session 并重试,因为有时它有效,有时则无效。

troush [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:抱歉不和谐

所以我认为它不是来 self 的网络或特定域。我认为这实际上与我使用这个库的方式有关。

感谢您的帮助

最佳答案

这是一个竞争条件。您正在向尚不存在的事物请求数据。在VM初始化时,inet_db需要获取解析器列表。您将在该过程完成之前进行该查询。

“快速 channel ”:

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 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com