有没有办法在 Perl 6 中处理 Unix 套接字?

Posted

技术标签:

【中文标题】有没有办法在 Perl 6 中处理 Unix 套接字?【英文标题】:Is there a way to deal with Unix sockets in Perl 6? 【发布时间】:2018-02-23 14:31:16 【问题描述】:

我想使用 Unix 套接字与 mpv 通信,但 Perl 6 不提供任何高级接口来实现这一点。所以我想我可以为此写一个小模块,开始深入挖掘,找到了IO::Socket::INET的实现,并了解了NQP操作nqp::socketnqp::connect

但是,我在NQP operations list 中找不到任何提及,它们似乎与传统的 BSD 套接字 API 截然不同。因此我想问:这两个能够创建一个 Unix 套接字并连接到它吗?如果是这样,怎么做?还是有其他方法?

【问题讨论】:

【参考方案1】:

我认为目前最好的方法是使用 NativeCall 接口来调用 C 级函数。有一些旧的设计文档建议考虑使用 IO::Socket::UNIX。但它还没有被纳入语言规范的当代版本。

【讨论】:

谢谢,我通过 Inline::Perl5 使用 Perl 5 中的 IO::Socket::UNIX 解决了这个问题,这就像魅力一样。我只是想知道是否有本地解决方案。 我一直在计划添加管道和 unix 套接字,但这需要 moar hacking(这不是很简单)。 @Ramillies 很高兴这对你来说足够好。 C API 上的 NativeCall 将是更原生的解决方案。 C 函数看起来几乎与 Perl 5 API 相同,所以可能不会太可怕。 @MattOates:好吧,我正在考虑这个问题,但我找不到如何将原始文件描述符转换为IO::Handle 或类似的东西(也许甚至不可能)。所以我使用了 Perl 5,因为我懒得使用 BSD 套接字 API 从头开始​​重新实现所有东西,我不太喜欢 :-)。 你指的设计文档很可能是我去年写的this grant proposal,虽然我直到最近才开始工作,但被接受了。如果一切按计划进行,到今年年底,您将能够在 Perl 6 中本地使用 UNIX 套接字(尽管它最终可能不会像我建议的那样设计,但我需要提出一个问题在我达到授权阶段后解决问题的回购协议上)。

以上是关于有没有办法在 Perl 6 中处理 Unix 套接字?的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl、套接字或命名管道 (fifos) 中啥更便携?

如何使用 akka 连接到 Unix 套接字?

如何在内存使用量大的 Perl 守护程序中处理多个套接字?

使用带有选择器的非阻塞模式下的 Java NIO 和 Unix 域套接字

使用带有Dart的UNIX套接字

在 JavaScript 中,有没有办法将 Web 套接字消息的处理推迟到设置标志之前?