code: def makefile(self, mode="r", buffering=None, **_3to2kwargs):
          
          if 'newline' in _3to2kwargs: newline = _3to2kwargs['newline']; del _3to2kwargs['newline']
          else: newline = None
          if 'errors' in _3to2kwargs: errors = _3to2kwargs['errors']; del _3to2kwargs['errors']
          else: errors = None
          if 'encoding' in _3to2kwargs: encoding = _3to2kwargs['encoding']; del _3to2kwargs['encoding']
          else: encoding = None
          for c in mode:
              if c not in ("r", "w", "b"):
                  raise ValueError("invalid mode %r (only r, w, b allowed)")
          writing = "w" in mode
          reading = "r" in mode or not writing
          assert reading or writing
          binary = "b" in mode
          rawmode = ""
          if reading:
              rawmode += "r"
          if writing:
              rawmode += "w"
          raw = SocketIO(self, rawmode)
          self._io_refs += 1
          if buffering is None:
              buffering = -1
          if buffering < 0:
              buffering = io.DEFAULT_BUFFER_SIZE
          if buffering == 0:
              if not binary:
                  raise ValueError("unbuffered streams must be binary")
              return raw
          if reading and writing:
              buffer = io.BufferedRWPair(raw, raw, buffering)
          elif reading:
              buffer = io.BufferedReader(raw, buffering)
          else:
              assert writing
              buffer = io.BufferedWriter(raw, buffering)
          if binary:
              return buffer
          text = io.TextIOWrapper(buffer, encoding, errors, newline)
          text.mode = mode
          return text
docs: makefile(...) -> an I/O stream connected to the socket
  
          The arguments are as for io.open() after the filename,
          except the only mode characters supported are 'r', 'w' and 'b'.
          The semantics are similar too.  (XXX refactor to share code?)