@Override
    public void close () throws IOException {
        if ( isClosed() ) {
            return;
        }

        super.close();
        this.impl.close();
        if ( this.boundEndpoint != null ) {
            NativeUnixSocket.unlink(this.boundEndpoint.getSocketFile());
        }
        try {
            Runtime.getRuntime().removeShutdownHook(this.shutdownThread);
        }
        catch ( IllegalStateException e ) {}
    }