docs: @Override
      public void error(VirtualConnection vc, TCPReadRequestContext rsc, IOException ioe) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "error() called: " + vc);
          }
  
          HttpInboundLink myLink = (HttpInboundLink) (vc == null ? null : vc.getStateMap().get(CallbackIDs.CALLBACK_HTTPICL));
          if (myLink == null)
          {
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "error: myLink is null");
  
              }
  
          }
  
          else {
  
              HttpInboundServiceContextImpl isc = myLink.getHTTPContext();
              isc.setPersistent(false);
              myLink.setFilterCloseExceptions(true);
              // if there was no data in the 2nd or later request, then just close
              // as this would be a timeout on the persist read. All other cases
              // we should send the 408 Request Timeout error page back
              if ((myLink.isFirstRequest() || myLink.isPartiallyParsed())
                  && (ioe instanceof SocketTimeoutException)) {
                  try {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Error, sending 408 timeout back");
                      }
                      if (isc.getHttpConfig().getDebugLog().isEnabled(DebugLog.Level.WARN)) {
                          isc.getHttpConfig().getDebugLog().log(DebugLog.Level.WARN, HttpMessages.MSG_READ_FAIL, isc);
                      }
                      isc.setHeadersParsed();
                      isc.sendError(StatusCodes.REQ_TIMEOUT.getHttpError());
                  } catch (MessageSentException mse) {
                      FFDCFilter.processException(mse, getClass().getName() + ".error", "152");
                      // shouldn't be possible since we're timing out during the
                      // read for the inbound request
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "MessageSent error during ICL read error");
                      }
                      myLink.close(vc, ioe);
                  }
              } else {
                  // this is during the read for a secondary request message with no
                  // current parse taking place.
                  myLink.close(vc, ioe);
              }
          }
      }