Erlang:将TCP插座作为stdin传递到UNIX过程



我需要从Erlang运行UNIX进程,并将TCP套接字设置为Stdin。这可能吗?

现在,我有一个从牧场获得的TCP套接字,并且可以获取其文件描述符,但是我不确定如何将其设置为正在创建的UNIX流程的STDIN。浏览open_port文档并没有为我提供有关如何执行此操作的任何线索。

我需要这样做的原因是我所调用的过程很难编码以期望其标准成为插座,如果没有,它会崩溃。这意味着我不能只用open_port打开它,然后将TCP流代理到它。

我在ubuntu上跑步12.04。

您有两个问题:能够打电话给套接字,并将其作为I/O:

的过程standard_io
  • 每个过程都有A group Leader ,这是一个在呼叫中没有特定I/O设备的I/O请求。可以使用BIF erlang:group_leader/2设置此过程来设置流程的组领导者。当产生一个过程时,小组负责人是继承的,这就是为什么从外壳产生的所有进程都会发送其输出与外壳相同的原因,即使它在另一个节点上产生。

  • 下一个问题是修复它,以便您可以执行ERLANG I/O请求,例如io:format to/trom TCP套接字。Erlang中的I/O必须通过实现ERLANG I/O协议的I/O服务器。是I/O服务器,它可以处理来自ERLANG代码的I/O请求,并将其转换为从外部发送/接收数据。我已经在GitHub上实现了TCP I/O服务器。没有这样的文档,但是底部的一些示例,例如一个打开收听插座的示例,每个新连接都会启动一个通过该插座处理I/O的外壳。这实际上是很短的代码。

因此,这基本上就是您需要做的以在过程/过程组和TCP端口之间获得I/O。

最新更新