在课堂上创建fileno?

时间:2013-09-28 19:18:04

标签: python sockets

我目前正在重写一些使用python的select.select()方法的代码,但是这些只会返回套接字对象,我必须将该套接字手动匹配到放在那里的类中的套接字在__init__下。那个伪代码基本上是[classobject for classobject in classList if SocketFromSelection == class.socketobject][0](我正在使用它)。

我在python文档中发现,在select.select()中,你也可以自己定义一个包装类,只要它有一个合适的fileno()方法(它真的返回一个文件描述符,而不仅仅是一个随机整数)“。

我的问题是,如何在类中附加一个fileno()方法,以便我可以将这些类的序列传递给select.select(),以便它返回类而不仅仅是套接字?还有,这会在Windows上运行吗?如果没有,是否有更好的方法将套接字与类列表中的类匹配?

1 个答案:

答案 0 :(得分:3)

从你问题中包含的代码中,听起来你有一个包含套接字的类(作为socketobject属性)。在这种情况下,您可以通过在包装器上代理套接字的select方法来使您的包装器对象fileno成为可能:

def SocketWrapper(object):
    def __init__(self, socket):
        self.socketobj = socket # use whatever you are already doing

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

现在你可以将SocketWrapper的实例直接传递给select,而不是传递套接字,然后再排除哪个套接字对应哪个实例。