docs: private void flushAsyncUpgradedOutputBuffers() throws IOException {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "flushAsyncUpgraded: Flushing async buffers  for Upgraded output: " + this);
          }
  
          final boolean writingBody = (hasBufferedContent());
          // flip the last buffer for the write...
          if (writingBody && null != this._output[this.outputIndex]) {
              this._output[this.outputIndex].flip();
          }
          VirtualConnection _vcWrite = null;
          try {
              WsByteBuffer[] content = (writingBody) ? this._output : null;
              // write it out to TCP           
              if(content != null) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "flushAsyncUpgraded: Now write it out to TCP");
                  }
                  _tcpContext.getWriteInterface().setBuffers(content);
  
                  _vcWrite =_tcpContext.getWriteInterface().write(TCPWriteRequestContext.WRITE_ALL_DATA, _callback, false, WCCustomProperties31.UPGRADE_WRITE_TIMEOUT);
                  if (_vcWrite == null) { // then we will have to wait for data to be written, async write in progress                                        
                      this.setInternalReady(false); // tell internal
                      this.setReadyForApp(false); // tell app
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "flushAsyncUpgraded:  wait for data to be written, async write in progress, set ready to false");
                      }
                  }
              }
              else{
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "flushAsyncUpgraded: No more data to flush ");
                  } 
              }        
          } finally {
              this.bytesWritten += this.bufferedCount;            
              this.bufferedCount = 0;
              this.outputIndex = 0;
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "flushAsyncUpgraded: finally, this " + this + " , bytesWritten -->" + this.bytesWritten);
              }
              if (writingBody && _vcWrite != null) {
                  clearBuffersAfterWrite();
              }
          }
      }