docs: public void readSyncResponse() throws IOException {
  
          // read the next response (up to the configured max) and decide whether
          // to hand it to the application channel or continue on for the next
          do {
              parseResponseMessageSync();
              int code = getResponse().getStatusCodeAsInt();
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "readSyncReponse: code is " + code);
              }
              if (isImmediateReadEnabled()) {
                  // this scenario means we just need a "handshake" so continue
                  return;
              }
              if (!getResponseImpl().isTemporaryStatusCode()) {
                  // received a final response
                  return;
              }
              // this is a temporary response (1xx)
              if (this.bTempResponsesUsed) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "readSyncResponse: using temp response");
                  }
                  return;
              }
              if (getRequestImpl().isExpect100Continue()) {
                  if (100 != code) {
                      // if the Expectation failed, then this connection is
                      // finished, so no need to reset any values.
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Expect 100-continue failed with " + code);
                      }
                      setPersistent(false);
                      throw new ExpectationFailedException(code + " " + getResponseImpl().getReasonPhrase());
                  } else if (1 == numberResponsesReceived() && isHeadersSentState()) {
                      // if we've only sent the headers then the caller wants to
                      // be notified when the first 100-continue has been received
                      resetRead();
                      return;
                  }
              }
              resetRead();
  
          } while (numberResponsesReceived() <= getHttpConfig().getLimitOnNumberOfResponses());
  
          // if we're out of the loop, then we hit the maximum number of temporary
          // responses allowed... send an error to the app channel
          setPersistent(false);
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "readSyncResponse: too many responses: " + numberResponsesReceived());
          }
          throw new IOException("Max temp responses received: " + numberResponsesReceived());
      }