code: final void sendOverWire (final ProtocolDataUnit pdu) throws InternetSCSIException , IOException , InterruptedException {
  
          // set sequence counters
          final TargetMessageParser parser = (TargetMessageParser) pdu.getBasicHeaderSegment().getParser();
          parser.setExpectedCommandSequenceNumber(session.getExpectedCommandSequenceNumber().getValue());
          parser.setMaximumCommandSequenceNumber(session.getMaximumCommandSequenceNumber().getValue());
          final boolean incrementSequenceNumber = parser.incrementSequenceNumber();
          if (incrementSequenceNumber) // set StatSN only if field is not reserved
          parser.setStatusSequenceNumber(connection.getStatusSequenceNumber().getValue());
  
          if (LOGGER.isDebugEnabled()) LOGGER.debug("Sending this PDU:\n" + pdu);
  
          // send pdu
          pdu.write(socketChannel);
  
          // increment StatusSN if this was a Response PDU (with status)
          // or if special cases apply
          if (incrementSequenceNumber) connection.getStatusSequenceNumber().increment();
  
      }
docs: Sends the given <code>ProtocolDataUnit</code> instance over the socket to the connected iSCSI Target.
  
  @param pdu The <code>ProtocolDataUnit</code> instances to send.
  @throws InternetSCSIException if any violation of the iSCSI-Standard emerge.
  @throws IOException if an I/O error occurs.
  @throws InterruptedException if another caller interrupted the current caller before or while the current caller
  was waiting for a notification. The interrupted status of the current caller is cleared when this
  exception is thrown.