python socket.accept()抽象套接字类型

时间:2014-04-13 06:03:28

标签: python sockets

我正在编写一个带有多个套接字的程序,使用select语句来管理它们,使用以下代码:

while not self.stopped:
        input_ready, output_ready, except_ready = select.select(self.input_sockets, [], [], 5)
        if (not input_ready) and (not output_ready) and (not except_ready):
            print("Timed Out")
        else:
            for s in input_ready:
                s.process_data()

为此,我创建了一个从socket.socket中抽象出来的类,并添加了方法process_data。我有一个以这种方式定义的类,它绑定到套接字以侦听入站连接,当调用process_data()时,它使用(sock, address) = self.accept()接受连接...然后我添加sock到用于select的input_sockets数组,但显然accept方法返回一个套接字,而不是一个抽象类,因此没有process_data()方法,因此会导致错误。

有人能想到一种方法,我可以使用accecpt()方法返回我自己的抽象套接字类而不是普通的套接字吗?

由于

编辑:

我现在找到了一个快乐的工作 - 我没有创建一个抽象的套接字类,而是创建了一个标准类,如下所示:

class DirectConnection():

  def __init__(self, sock):
    self.socket = sock

  def fileno(self):
    return self.socket.fileno()

  def process_data(self):
    print("Got data")

然后从我的监听插座

(sock, address) = self.accept()
socketmanager.monitor_socket(DirectConnection(sock))

select.select使用套接字对象的fileno属性,因此通过定义一个fileno()方法返回传递给类的套接字的fileno(),我现在可以拥有select.select在这个类上调用我的方法,然后我可以指示从传入的套接字发送/接收数据。

赠送给:http://bytes.com/topic/python/answers/437702-subclassing-sockethttp://code.activestate.com/recipes/52295/

0 个答案:

没有答案