title: Connection was forcibly closed by the remote host
body: <p>I have a java.nio.channels.SocketChannel in my jSCSI implamantation that is disconnecting when I try to open a driver with size greater than 4GB. The iscsi RFC says that the BasicHeaderSegment.BHS_FIXED_SIZE may be 48, so with this position I can read the bytes on the channel. The java doc says 5 types of errors, but my app is throwing the last one that doesn't say a specific information.</p>
  
  <ol>
  <li>NotYetConnectedException</li>
  <li>ClosedChannelException</li>
  <li>AsynchronousCloseException</li>
  <li>ClosedByInterruptException</li>
  <li>IOException</li>
  </ol>
  
  <p>Code:</p>
  
  <pre><code>public final int read(final SocketChannel sChannel) throws InternetSCSIException, IOException, DigestException {
  // read Basic Header Segment first to determine the total length of this
  // Protocol Data Unit.
  clear();
  
  final ByteBuffer bhs = ByteBuffer.allocate(BasicHeaderSegment.BHS_FIXED_SIZE);
  int len = 0;
  while (len &lt; BasicHeaderSegment.BHS_FIXED_SIZE) {
      int lens = sChannel.read(bhs);
      if (lens == -1) {
          // The Channel was closed at the Target (e.g. the Target does
          // not support Multiple Connections)
          // throw new ClosedChannelException();
          return lens;
      }
      len += lens;
      LOGGER.trace("Receiving through SocketChannel: " + len + " of maximal " + BasicHeaderSegment.BHS_FIXED_SIZE);
  
  }
  bhs.flip();
  </code></pre>
  
  <p>error:</p>
  
  <pre><code>java.io.IOException: An existing connection was forcibly closed by the remote host
      at sun.nio.ch.SocketDispatcher.read0(Native Method)
      at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
      at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
      at sun.nio.ch.IOUtil.read(IOUtil.java:197)
      at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
      at org.jscsi.parser.ProtocolDataUnit.read(ProtocolDataUnit.java:417)
      at org.jscsi.target.connection.TargetSenderWorker.receiveFromWire(TargetSenderWorker.java:145)
      at org.jscsi.target.connection.Connection$TargetConnection.receivePdu(Connection.java:217)
      at org.jscsi.target.connection.phase.TargetFullFeaturePhase.execute(TargetFullFeaturePhase.java:96)
      at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:264)
      at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:79)
      at java.util.concurrent.FutureTask.run(FutureTask.java:262)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:744)
  [pool-9-thread-1] INFO org.jscsi.target.connection
  </code></pre>
  
  <p>Thanks in advance,
  Felipe</p>