def _read_until(self, delimiter, callback):
self._read_buffer += self.recv(4096)
pos = self._read_buffer.find(delimiter)
if pos >= 0:
pos += len(delimiter)
if pos > 0:
data = self._read_buffer[:pos]
self._read_buffer = self._read_buffer[pos:]
if data:
callback(data)