如何从Erlang向现有Unix套接字发送消息?

如何从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

我看到它支持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 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]),邮件列表示例将起作用。