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)