public long read(final ByteBuffer[] dsts, final int offs, final int len) throws IOException {
   if (allAreSet(state, READ_SHUTDOWN)) {
     return -1;
   }
   long res = Native.readScatter(fd, dsts, offs, len);
   if (res <= 0) state &= ~READ_READY;
   checkReadTimeout(res > 0);
   return res;
 }