我正在实现一个 python 脚本以编程方式进行熔断器安装。通过使用 socketpair 和 recvmsg api,我在 C 中编写了一个等价物。但是在python recvmsg 中没有实现,所以我被卡住了。你们中的任何人都可以告诉我一个相当于这个的python吗?任何帮助,将不胜感激。
让我告诉我为什么需要recvmsg,我需要将保险丝支架的fd从孩子发送给父母。
您可以看到的是使用 pyx 或用于 Python 的 C 模块,它在 C 中实现所需的功能,然后您可以从 Python 脚本中操作和/或使用它。这将允许您发送文件描述符并让 Python 脚本对其进行操作。
你可以做的其他事情是编写一个小的 C 包装器,它处理 recvmsg,直到它得到那个 fd 并打开它才做一个 fork。所有打开的文件描述符在你 fork 时将保持打开状态,然后是 exec 甚至只是普通的旧 exec ,这意味着你不必担心 Python 会接收它。
作为 Python3的一部分,socket.recvmsg现在在socket
模块中可用,根据文档,该模块应该允许你做你想做的事(尽管很晚!):
在某些系统上,sendmsg() 和 recvmsg() 可用于通过 AF_UNIX 套接字在进程之间传递文件描述符。当使用此工具时(通常仅限于 SOCK_STREAM 套接字),recvmsg() 将在其辅助数据中返回形式为 (socket.SOL_SOCKET, socket.SCM_RIGHTS, fds) 的项目,其中 fds 是一个字节对象,表示新文件描述符作为本机 C int 类型的二进制数组。如果系统调用返回后 recvmsg() 引发异常,它将首先尝试关闭通过此机制接收到的任何文件描述符。