示例#1
0
 private int fillReadBuffer(boolean block) throws IOException {
   int nRead;
   NioChannel channel = getSocket();
   socketBufferHandler.configureReadBufferForWrite();
   if (block) {
     Selector selector = null;
     try {
       selector = pool.get();
     } catch (IOException x) {
       // Ignore
     }
     try {
       NioEndpoint.NioSocketWrapper att = (NioEndpoint.NioSocketWrapper) channel.getAttachment();
       if (att == null) {
         throw new IOException("Key must be cancelled.");
       }
       nRead =
           pool.read(
               socketBufferHandler.getReadBuffer(), channel, selector, att.getReadTimeout());
     } finally {
       if (selector != null) {
         pool.put(selector);
       }
     }
   } else {
     nRead = channel.read(socketBufferHandler.getReadBuffer());
     if (nRead == -1) {
       throw new EOFException();
     }
   }
   return nRead;
 }