我尝试过一些东西,但我无法从中读取任何内容
{ok, Port} = gen_udp:open(0, [{ifaddr,{local,"/tmp/socket2"}}]).
然后我切换到控制台。
echo "hi" | socat - UNIX-CONNECT:/tmp/socket2
返回erlang
41> gen_udp:recv(Port, 2, 5000).
{error,timeout}
感谢任何帮助。我还试过{active,true} opt和flush()。没有任何表现。
答案 0 :(得分:5)
我没有尝试正式版本19,但我可以使用最新git (截至7月7日)通过以下方式使用它:
{active, false}
<强>示范强>:
控制台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"}}