如何获取已绑定tcp客户端的端口的文件描述符

时间:2012-12-16 18:02:06

标签: python tcp client twisted file-descriptor

如何获取已绑定客户端的端口的文件描述符。 我希望这能在不同进程之间共享端口。

我能够获取tcp服务器的文件描述符,但是我无法获得 客户端的文件描述符。例如:

p=reactor.listenTCP(8005,Myfactory())

其中p是端口对象,在这里我可以使用p.fileno()

获取文件描述符

但是在客户端的情况下

p=reactor.connectTCP('127.0.0','8080',MyFactory())

此处如果p.fileno()

我收到如下错误

AttributeError: 'int' object has no attribute 'fileno'

我知道它是整数,但我的问题是:有没有其他方法来获取客户端的文件描述符?

1 个答案:

答案 0 :(得分:1)

嗯......你想做的是位hacky。

首先,connectTCP()的结果对你来说没用,因为此时还没有连接。

您可以在建立连接后开始考虑提取文件描述符,因此已调用协议实例的connectionMade()方法。有关文件描述符的信息由传输保存,它实现ITransport接口。不幸的是,这个接口不会公开有关文件描述符的信息,因为它更为通用。

如果是简单的TCP连接,您的传输将是twisted.internet.protocol.FileWrapper的实例,它具有文件属性。总结所有这些,您的代码看起来有点像:

class MyProtocol(protocol.Protocol):

    def connectionMade(self):
         print 'file descriptor is: ', self.transport.file.fileno()