从文件描述符实例化套接字对象的不显眼方法

时间:2012-07-30 20:13:40

标签: c++ python sockets dll 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.dupos.dup2中找到按值复制。

有人知道引用它的方法吗?

4 个答案:

答案 0 :(得分:4)

由于此问题似乎尚未得到解答(为期一周),我将陈述我的解决方案。

我实现了一个内部绑定,用于从库中检索套接字信息,将ctypes转换为pytuples。因为应用程序本身包含在py2exe中,所以此修改对最终用户来说并不显眼。

答案 1 :(得分:0)

答案 2 :(得分:0)

socket.fromfd(fd, family, type[, proto])似乎做你想做的事。不幸的是,它仅适用于类似Unix的平台。

不幸的是,此功能似乎不适用于Windows。您可以考虑在http://bugs.python.org/记录一个错误(我认为没有理由为什么Windows套接字对象不能在Python套接字对象中包装)。

答案 3 :(得分:0)

这有帮助吗?您可以使用它来包装套接字和/或文件描述符,以便它们更像文件,同时提供有用的框架数据,如sock.readto('\ 0'):

http://stromberg.dnsalias.org/~strombrg/bufsock.html