如何从Erlang向现有Unix套接字发送消息?
我看到它支持Unix套接字,并展示了如何在Erlang中创建一个using套接字 我想将消息发送到现有的Unix套接字(通过其JSON IPC接口进行控制)。我知道这是有道理的,但是答案对我来说没有意义,因为如何从Erlang向现有Unix套接字发送消息?,erlang,unix-socket,Erlang,Unix Socket,我看到它支持Unix套接字,并展示了如何在Erlang中创建一个using套接字 我想将消息发送到现有的Unix套接字(通过其JSON IPC接口进行控制)。我知道这是有道理的,但是答案对我来说没有意义,因为Sock2是在没有之前的作业的情况下使用的 我在gen_udp文档中看到此选项: {fd, integer() >= 0} If a socket has somehow been opened without using gen_udp, use this option t
Sock2
是在没有之前的作业的情况下使用的
我在gen_udp
文档中看到此选项:
{fd, integer() >= 0}
If a socket has somehow been opened without using gen_udp,
use this option to pass the file descriptor for it.
但是当我试图用file:open/2
以文件的形式打开套接字时,我得到了{error,eopnotsupp}
如何向现有Unix套接字发送消息?回答我的问题
这将不是一个规范的、彻底的答案,因为我对套接字不太熟悉。然而,我通过上面的邮件列表链接给Joe发了电子邮件,他说:
据我所知,unix套接字类型到erlang模块的映射
详情如下:
SOCK_STREAM -> gen_tcp
SOCK_DGRAM -> gen_udp
SOCK_SEQPACKET -> gen_sctp
他建议在我的例子中使用gen_tcp:connect
,结果成功了!显然,mpv创建了一个SOCK\u流
socket
因此,在开始mpv的时候,就像:
mpv /Users/me/playlist.m3u --input-ipc-server=/tmp/mpv.sock --idle yes --no-audio-display
。。。因此,它需要套接字上的命令/tmp/mpv.sock
,我可以在erl
中向它发送这样的“播放不同的播放列表”命令:
{ok, Port} = gen_tcp:connect({local, "/tmp/mpv.sock"}, 0, [local]).
Msg = "{ \"command\": [\"loadlist\", \"/Users/me/playlist2.m3u\", \"replace\"] }\n".
gen_tcp:send(Port, Msg).
如果您得到如下的
Sock2
,{ok,Sock2}=gen_udp:open(0,[local]),邮件列表示例将起作用。