4

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

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

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

代码与此类似:

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

我正在寻找一种方法来实际定义基于文件描述符的套接字对象,而不会在os.dupand中找到按值重复os.dup2

有人知道引用这个的方法吗?

4

4 回答 4

4

由于这个问题似乎尚未得到回答(1 周),我将说明我的解决方案。

我实现了一个内部绑定,用于从库中检索套接字信息,ctypespytuples. 因为应用程序本身被包裹在 中py2exe,所以这种修改对最终用户来说是不显眼的。

于 2012-08-08T02:08:42.740 回答
0

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

http://stromberg.dnsalias.org/~strombrg/bufsock.html
于 2012-07-30T20:57:54.887 回答
0

请再检查一次:

http://docs.python.org/library/socket.html#socket.fromfd

于 2012-07-30T20:26:24.417 回答
0

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

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

于 2012-07-30T20:26:29.287 回答