如何获取已绑定客户端的端口的文件描述符。 我希望这能在不同进程之间共享端口。
我能够获取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'
我知道它是整数,但我的问题是:有没有其他方法来获取客户端的文件描述符?
答案 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()