Есть типовой сервер на asyncore. Всё работает замечательно, но засада в том, что никак не могу сделать, чтобы был какой-то таймер для таймаута.
Нужно, чтобы если от клиента не поступило данных в течение 30 секунд, его отключало и закрывало сокет.
import asyncore import socket class EchoHandler(asyncore.dispatcher_with_send): def handle_read(self): data = self.recv(8192) if data: print 'Received data = ', data self.send(data) def handle_error(self): print 'Error' def handle_close(self): print 'Client disconnected normal' class EchoServer(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind((host, port)) self.listen(5) def handle_accept(self): pair = self.accept() if pair is not None: sock, addr = pair print 'Incoming connection from %s' % repr(addr) handler = EchoHandler(sock) server = EchoServer('localhost', 8080) asyncore.loop()