0

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

我能够获取 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'

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

4

1 回答 1

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()
于 2012-12-17T12:19:59.427 回答