将套接字转换为子类型

时间:2010-08-21 19:40:01

标签: python sockets

我正在尝试创建自己的socket.socket子类,它将能够处理自定义消息。到目前为止,我的代码看起来像这样:

    self._sockets.append(s)
    logging.debug("Waiting for incoming connections on port %d" % (port))
    while not self.shutdown:
        inputready,outputready,exceptready = select(self._sockets,[],[]) 
        print "Select returned"
        for i in inputready: 
            if s == i:
                # handle the server socket 
                client, address = s.accept()
                self._sockets.append(client)
                print "%r , %r" % (client, address) 
            else: 
                # handle all other sockets 
                s.handleMessage() 

因此你可以看到我接受新的连接,或者如果它从另一个套接字返回,它将调用该套接字上的handleMessage。现在的问题是,当然,socket.accept()将返回一个socket.socket,而不是我的子类,它实现了handleMessage函数。

获取自定义类而不是默认的socket.socket最简单的方法是什么?

2 个答案:

答案 0 :(得分:2)

根据您的描述,您似乎正在创建一个具有套接字(或套接字)的消息处理程序。在设计类 has -a 表示合成和委派时,是-a 可以表示继承。

所以从socket.socket继承是不合适的,你的代码已经看起来有点混合了。像这样的真正粗糙的伪代码可能最适合任务:

class MyMessageHandler(object):
    def __init__(self):
        self.sockets = [...]

    def wait(self):
        debug('waiting...')
        i, o, e = select(...)

答案 1 :(得分:1)

为套接字包装器对象设置字典映射套接字描述符有多难?