python 3'MarkerServer'对象没有属性'setsockopt'

时间:2017-05-10 14:53:53

标签: python-2.7 python-3.x sockets setsockopt

我有一个旧的python 27代码,我试图移植到python 35并且对以下部分有疑问:

class MarkerServer(asyncore.dispatcher):

def __init__(self, queue, proto):

    asyncore.dispatcher.__init__(self)
    self.queue = queue
    if proto.lower() == 'tcp':
        logger.debug('Opening TCP socket.')
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
        self.setblocking(0)
        self.bind(('', PORT))
        self.listen(5)
    elif proto.lower() == 'udp':
        logger.debug('Opening UDP socket.')
        self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.setblocking(0)
        self.bind(('', PORT))
        handler = MarkerHandler(self, self.queue)
    else:

这会返回以下错误:

    self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    AttributeError: 'MarkerServer' object has no attribute 'setsockopt'

1 个答案:

答案 0 :(得分:0)

感谢您对jasonharper的评论。 我意识到python 35的asyncore模块中还存在一个更深层次的问题。并非所有方法都被移植并产生错误。 修改模块后问题解决了。