【问题标题】:what is recvmsg equivalent in python?python中的recvmsg等价物是什么?
【发布时间】:2011-06-11 08:40:52
【问题描述】:

我正在实现一个 python 脚本以编程方式进行熔断器安装。通过使用 socketpair 和 recvmsg api,我在 C 中编写了一个等价物。但是在python recvmsg 中没有实现,所以我被卡住了。你们中的任何人都可以告诉我一个相当于这个的python吗?任何帮助将不胜感激。

让我说一下为什么我需要 recvmsg,我需要将 fuse mount 的 fd 从 child 发送给 parent。

【问题讨论】:

  • 尚未登陆Python,见bugs.python.org/issue6560
  • 没有。据我所知,没有办法使用 Python 中当前可用的内容来实现 recvmsg。你用 recvmsg 发送什么数据?可以改用标准插座吗?
  • 我也遇到了这个问题。我试了一下,但没走多远。

标签: python sockets fuse


【解决方案1】:

您可以看到的是使用 pyx 或用于 Python 的 C 模块,它在 C 中实现所需的功能,然后您可以从 Python 脚本中操作和/或使用它。这将允许您发送文件描述符并让 Python 脚本对其进行操作。

你可以做的其他事情是编写一个小的 C 包装器,它处理 recvmsg,直到它得到那个 fd 并打开它才做一个 fork。所有打开的文件描述符在你 fork 时将保持打开状态,然后是 exec 甚至只是普通的旧 exec,这意味着你不必担心 Python 会接收它。

【讨论】:

    【解决方案2】:

    作为 Python3 的一部分,socket.recvmsg 现在可在 socket 模块中使用,根据文档,该模块应该允许您做您想做的事(尽管很晚!):

    在某些系统上,sendmsg() 和 recvmsg() 可用于传递文件 AF_UNIX 套接字上的进程之间的描述符。当这 使用设施(通常仅限于 SOCK_STREAM 套接字), recvmsg() 将在其辅助数据中返回表单项 (socket.SOL_SOCKET, socket.SCM_RIGHTS, fds),其中 fds 是一个字节 将新文件描述符表示为二进制数组的对象 本机 C int 类型。如果 recvmsg() 在系统之后引发异常 调用返回,它将首先尝试关闭任何文件描述符 通过这种机制接收。

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2011-09-03
      • 2011-03-07
      • 2021-06-19
      • 2017-04-20
      • 2012-09-26
      • 2011-04-13
      • 2017-10-26
      • 2016-12-06
      相关资源
      最近更新 更多