def readline(self): data = "" try: dsunittest.trace3("AsyncSocketFile readlining data timeout is %f" % self.timeout_) self.socket_.setblocking(0) data = self._readline() finally: dsunittest.trace3(" AsyncSocketFile readline returning %u bytes" % len(data)) self.socket_.setblocking(1) return data
def _readline(self): startTime = time.time() while self.readBuffer_.find("\n") == -1: try: dsunittest.trace3("_readline calling recv with timeout %f" % self.timeout_) ret = self.socket_.recv(512) dsunittest.trace3("_readline recv returned with timeout %f" % self.timeout_) if not ret: #raise "No more data. Read buffer is: %s" % self.readBuffer_ ret = self.readBuffer_ self.readBuffer_ = "" return ret self.readBuffer_ += ret except socket.error: elapsed = time.time() - startTime dsunittest.trace3("Elapsed is %f, timeout is %f" % (elapsed, self.timeout_)) if self.timeout_ and elapsed > self.timeout_: dsunittest.trace3("Raising timeout at %f, timeout is %f" % (elapsed, self.timeout_)) raise Timeout() else: time.sleep(1) pos = self.readBuffer_.index("\n") + 1 line = self.readBuffer_[:pos] self.readBuffer_ = self.readBuffer_[pos:] return line
def read(self, numBytes): dsunittest.trace3("AsyncSocketFile reading data, size=%d" % numBytes) try: self.socket_.setblocking(0) while numBytes > len(self.readBuffer_): try: ret = self.socket_.recv(numBytes) assert len(ret) <= numBytes if len(ret) == 0: break else: self.readBuffer_ += ret except socket.error: pass ret = self.readBuffer_[:numBytes] self.readBuffer_ = self.readBuffer_[numBytes:] return ret finally: self.socket_.setblocking(1) dsunittest.trace3(" AsyncSocketFile read returning")
def write(self, data): dsunittest.trace3("AsyncSocketFile writing %d bytes" % len(data)) try: while data: written = self.socket_.send(data) dsunittest.trace3(" AsyncSocketFile wrote a block of %d bytes" % written) data = data[written:] finally: dsunittest.trace3(" AsyncSocketFile write returning")