Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4663867

channel.socket().getInputStream().available() returns 0

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 1.4.0
    • core-libs
    • x86
    • solaris_7



      Name: gm110360 Date: 04/05/2002


      FULL PRODUCT VERSION :
      java version "1.4.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
      Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)


      FULL OPERATING SYSTEM VERSION :
      SunOS jersy5 5.7
      Generic_106542-19 i86pc i386 i86pc


      A DESCRIPTION OF THE PROBLEM :
      The SocketChannel is registered as:

      channel.register(selector, SelectionKey.OP_READ);

      When SelectionKey for that channel indicates that channel
      is ready for reading ( key.isReadable() returns true),
      call to
      channel.socket().getInputStream().available() returns 0.


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      The call to:
      channel.socket().getInputStream().available()
      should return number of bytes available in the InputStream.

      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.io.*;
      import java.nio.*;
      import java.nio.channels.*;
      import java.net.*;
      import java.util.*;


      public class AvailableBytesTest implements Runnable {

        int port = 9999;
        Selector selector;
        InetSocketAddress isa;

        public AvailableBytesTest() throws IOException {
          ServerSocketChannel channel = ServerSocketChannel.open();
          channel.configureBlocking(false);
          InetAddress ia = InetAddress.getLocalHost();
          isa = new InetSocketAddress(ia, port);
          channel.socket().bind(isa);

          selector = Selector.open();
          channel.register(selector, SelectionKey.OP_ACCEPT);
        }
        
        public void run() {
          SocketChannel channel = null;
          try {
            channel = SocketChannel.open();
            channel.connect(isa);
            byte[] data = new byte[64];
            ByteBuffer buf = ByteBuffer.wrap(data);
            channel.write(buf);
          } catch(IOException e) {
            e.printStackTrace();
          }
          try {
            Thread.sleep(1000);
            selector.wakeup();
            Thread.sleep(1000);
            channel.close();
          } catch(Exception e) {
            e.printStackTrace();
          }
        }

        public void exec() throws IOException {
          new Thread(this).start();
          ByteBuffer buf = ByteBuffer.allocate(64);
          for (;;) {
            System.out.println("Waiting...");
            if ( selector.select() == 0 ) {
              System.out.println("Exiting...");
      break;
            }
            System.out.println("Working...");
            Iterator it = selector.selectedKeys().iterator();

            while (it.hasNext()) {
              SelectionKey key = (SelectionKey) it.next();
      it.remove();

      if (key.isAcceptable()) {
      System.out.println("Got acceptable key.");
      ServerSocketChannel ssc = (ServerSocketChannel) key.channel();

      SocketChannel channel = (SocketChannel) ssc.accept();
      channel.configureBlocking(false);
      channel.register(selector, SelectionKey.OP_READ);
      }
      if (key.isReadable()) {
      System.out.println("Got readable key.");
      SocketChannel channel = (SocketChannel) key.channel();

      int num = channel.socket().getInputStream().available();
      System.out.println("Number of available bytes: " + num);

                num = channel.read(buf);
                System.out.println("Number of bytes read: " + num);
      }
            }
          }
        }

        public static void main( String[] args ) {
          try {
            new AvailableBytesTest().exec();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }

      ---------- END SOURCE ----------
      (Review ID: 145070)
      ======================================================================

            mr Mark Reinhold
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: