docs: @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable exception) throws Exception {
      if (exception instanceof FrameDecodingException) {
        int streamId = ((FrameDecodingException) exception).streamId;
        LOG.debug("[{}] Error while decoding response on stream id {}", logPrefix, streamId);
        if (streamId >= 0) {
          // We know which request matches the failing response, fail that one only
          ResponseCallback responseCallback = inFlight.get(streamId);
          if (responseCallback != null) {
            try {
              responseCallback.onFailure(exception.getCause());
            } catch (Throwable t) {
              Loggers.warnWithException(
                  LOG, "[{}] Unexpected error while invoking failure handler", logPrefix, t);
            }
          }
          release(streamId, ctx);
        } else {
          Loggers.warnWithException(
              LOG,
              "[{}] Unexpected error while decoding incoming event frame",
              logPrefix,
              exception.getCause());
        }
      } else {
        // Otherwise fail all pending requests
        abortAllInFlight(
            (exception instanceof HeartbeatException)
                ? (HeartbeatException) exception
                : new ClosedConnectionException("Unexpected error on channel", exception));
        ctx.close();
      }
    }