我尝试了几件事,但无法读取任何内容
{ok, Port} = gen_udp:open(0, [{ifaddr,{local,"/tmp/socket2"}}]).
Run Code Online (Sandbox Code Playgroud)
然后我切换到控制台。
echo "hi" | socat - UNIX-CONNECT:/tmp/socket2
Run Code Online (Sandbox Code Playgroud)
回到埃尔朗
41> gen_udp:recv(Port, 2, 5000).
{error,timeout}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。我也尝试过{active,true} opt和flush()。什么也没显示。
我尚未尝试过正式发行版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>
Run Code Online (Sandbox Code Playgroud)
控制台2:
$ echo "hi" | socat - UNIX-SENDTO:/tmp/socket2,bind=/tmp/socket1
Run Code Online (Sandbox Code Playgroud)
控制台1结果:
okok #Port<0.451>
{ok,{{local,<<"/tmp/socket1">>},0,"hi\n"}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |