class SocketInputStream(InputStream): def __init__(self, socket, timeout): super(SocketInputStream, self).__init__() self.__socket = socket self.__timeout = timeout self.__select = SimpleSelect(socket) def ready(self, timeout = Timeout.NONBLOCK): super(SocketInputStream, self).ready(timeout) return self.__select.readReady(timeout) def read(self, bytes): super(SocketInputStream, self).read(bytes) try: return self.__read(bytes) except socket.timeout: raise TimeoutError def __read(self, bytes): if self.ready(self.__timeout): return signalSafeCall(self.__socket.recv, bytes) else: raise TimeoutError
class SocketOutputStream(OutputStream): def __init__(self, socket, timeout): super(SocketOutputStream, self).__init__() self.__socket = socket self.__timeout = timeout self.__select = SimpleSelect(socket) def flush(self): super(SocketOutputStream, self).flush() #fileObject = os.fdopen(self.__socket.fileno()) #fileObject.flush() def write(self, data): super(SocketOutputStream, self).write(data) try: self.__write(data) except socket.timeout: raise TimeoutError def __write(self, data): if self.__select.writeReady(self.__timeout): return signalSafeCall(self.__socket.sendall, data) else: raise TimeoutError
def __init__(self, socket, timeout): super(SocketInputStream, self).__init__() self.__socket = socket self.__timeout = timeout self.__select = SimpleSelect(socket)