【问题标题】:How do unix domain sockets work in Erlang 19Unix域套接字如何在Erlang 19中工作
【发布时间】:2016-11-10 00:03:40
【问题描述】:

我尝试了一些东西,但我无法从中读取任何内容

{ok, Port} = gen_udp:open(0, [{ifaddr,{local,"/tmp/socket2"}}]).

然后我切换到控制台。

echo "hi" |  socat - UNIX-CONNECT:/tmp/socket2

回到二郎

41> gen_udp:recv(Port, 2, 5000).
{error,timeout}

感谢任何帮助。我也试过 {active, true} opt 和 flush()。什么都不显示。

【问题讨论】:

标签: erlang


【解决方案1】:

我还没有尝试过正式版本 19,但我可以使用 latest git(截至 7 月 7 日)使其工作:

  1. 使用{active, false} 禁用活动
  2. 使用 UNIX-SENDTO 代替 UNIX-CONNECT
  3. 将 socat 的套接字绑定到它自己的地址(不绑定会在解析地址时在 erlangs 端产生错误。)

演示

控制台 1:

$ rm /tmp/socket*
$ erl
Erlang/OTP 19 [erts-8.0.1] [source-ca40008] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.0.1  (abort with ^G)
 1> {ok, Port} = gen_udp:open(0, [{active, false},{ifaddr, {local,"/tmp/socket2"}}]),
 1>         io:format("ok~w ~w~n", [ok,Port]),
 1>         gen_udp:recv(Port, 2).
 okok #Port<0.451>

控制台 2:

 $ echo "hi" |  socat - UNIX-SENDTO:/tmp/socket2,bind=/tmp/socket1

控制台 1 结果:

okok #Port<0.451>
{ok,{{local,<<"/tmp/socket1">>},0,"hi\n"}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多