示例#1
0
 private int readSocket(byte[] buf, int pos, int n, boolean block) throws IOException {
   int nRead = 0;
   ByteBuffer readBuffer = socketWrapper.getSocket().getBufHandler().getReadBuffer();
   readBuffer.clear();
   readBuffer.limit(n);
   if (block) {
     Selector selector = null;
     try {
       selector = pool.get();
     } catch (IOException x) {
       // Ignore
     }
     try {
       NioEndpoint.KeyAttachment att =
           (NioEndpoint.KeyAttachment) socketWrapper.getSocket().getAttachment(false);
       if (att == null) throw new IOException("Key must be cancelled.");
       nRead = pool.read(readBuffer, socketWrapper.getSocket(), selector, att.getTimeout());
     } catch (EOFException eof) {
       nRead = -1;
     } finally {
       if (selector != null) pool.put(selector);
     }
   } else {
     nRead = socketWrapper.getSocket().read(readBuffer);
   }
   if (nRead > 0) {
     readBuffer.flip();
     readBuffer.limit(nRead);
     readBuffer.get(buf, pos, nRead);
     return nRead;
   } else if (nRead == -1) {
     // return false;
     throw new EOFException(sm.getString("iib.eof.error"));
   } else {
     return 0;
   }
 }