从文件描述符实例化套接字对象的非侵入性方法
Unobtrusive Method for Instantiating Socket Object from File Descriptor
Python中目前存在一个套接字库:
参考:http://docs.python.org/library/socket.html
但是,此库不包括基于文件描述符引用现有套接字的功能。我目前正在为一个C++库开发Python绑定,该库首先打开一个套接字,之后需要一种方法在Python中引用这个打开的套接字请记住,这是在Windows上运行的(我使用的是忽略文件句柄的跨平台抽象层)。
代码类似于此:
fd = connect(...) # file descriptor
os.read(fd, buffer)
os.close(fd)
我正在寻找一种基于文件描述符实际定义套接字对象的方法,而不会出现os.dup
和os.dup2
中的按值重复。
有人知道引用这个的方法吗?
由于这个问题似乎还没有得到回答(一周内),我将说明我的解决方案。
我实现了一个内部绑定,用于从库中检索套接字信息,将ctypes
转换为pytuples
。由于应用程序本身被封装在py2exe
中,因此这种修改对最终用户来说并不引人注目。
请再次检查:
http://docs.python.org/library/socket.html#socket.fromfd
这有帮助吗?您可以使用它来包装套接字和/或文件描述符,使它们感觉更像文件,同时提供在帧数据中有用的操作,如sock.readto("\0"):
http://stromberg.dnsalias.org/~strombrg/bufsock.html
socket.fromfd(fd, family, type[, proto])
似乎可以随心所欲。不幸的是,它只能在类Unix平台上使用。
遗憾的是,此功能似乎不适用于Windows。您可以考虑将错误记录在http://bugs.python.org/(我看不出为什么windows套接字对象不能封装在Python套接字对象中)。
相关文章:
- 使用std::函数映射对象方法
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 从父类方法返回子类对象
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 为什么此派生对象无法访问基类的后递减方法?
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 正在调用shared_ptr对象方法
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 检查哪个对象调用了另一个对象的对象方法
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 没有取消引用/解包对象的标准方法?
- 使用 gmock c++ 在真实对象上调用方法
- 当我调用对象的方法时,对象的成员会发生变化
- 根据对象类调用不同的方法
- 如何在C++中循环访问未知对象方法?
- 使用动态实例化的对象填充矢量的快速方法
- 对类中的对象使用方法