从文件描述符实例化套接字对象的非侵入性方法

Unobtrusive Method for Instantiating Socket Object from File Descriptor

本文关键字:方法 对象 描述 文件 实例化 套接字      更新时间:2023-10-16

Python中目前存在一个套接字库:

参考:http://docs.python.org/library/socket.html

但是,此库不包括基于文件描述符引用现有套接字的功能。我目前正在为一个C++库开发Python绑定,该库首先打开一个套接字,之后需要一种方法在Python中引用这个打开的套接字请记住,这是在Windows上运行的(我使用的是忽略文件句柄的跨平台抽象层)。

代码类似于此:

fd = connect(...) # file descriptor
os.read(fd, buffer)
os.close(fd)

我正在寻找一种基于文件描述符实际定义套接字对象的方法,而不会出现os.dupos.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套接字对象中)。