docs: def get_extra_info(self, name, default=None):
          """Get transport specific data.
  
          In addition to the fields from :meth:`BaseTransport.get_extra_info`,
          the following information is also available:
  
          =====================  ===================================================
          Name                   Description
          =====================  ===================================================
          ``'sockname'``         The socket name i.e. the result of the
                                 ``getsockname()`` system call.
          ``'peername'``         The peer name i.e. the result of the
                                 ``getpeername()`` system call.
          ``'winsize'``          The terminal window size as a ``(cols, rows)``
                                 tuple. Only available for :class:`pyuv.TTY`
                                 handles.
          ``'unix_creds'``       The Unix credentials of the peer as a
                                 ``(pid, uid, gid)`` tuple. Only available for
                                 :class:`pyuv.Pipe` handles on Unix.
          ``'server_hostname'``  The host name of the remote peer prior to
                                 address resolution, if applicable.
          =====================  ===================================================
          """
          if name == 'sockname':
              if not hasattr(self._handle, 'getsockname'):
                  return default
              try:
                  return self._handle.getsockname()
              except pyuv.error.UVError:
                  return default
          elif name == 'peername':
              if not hasattr(self._handle, 'getpeername'):
                  return default
              try:
                  return self._handle.getpeername()
              except pyuv.error.UVError:
                  return default
          elif name == 'winsize':
              if not hasattr(self._handle, 'get_winsize'):
                  return default
              try:
                  return self._handle.get_winsize()
              except pyuv.error.UVError:
                  return default
          elif name == 'unix_creds':
              # In case you're wondering, DBUS needs this.
              if not isinstance(self._handle, pyuv.Pipe) or not hasattr(socket, 'SO_PEERCRED'):
                  return default
              try:
                  fd = self._handle.fileno()
                  sock = socket.fromfd(fd, socket.AF_UNIX, socket.SOCK_DGRAM)  # will dup()
                  with contextlib.closing(sock):
                      creds = sock.getsockopt(socket.SOL_SOCKET, socket.SO_PEERCRED,
                                              struct.calcsize('3i'))
              except socket.error:
                  return default
              return struct.unpack('3i', creds)
          elif name == 'server_hostname':
              return self._server_hostname
          else:
              return super(Transport, self).get_extra_info(name, default)