Package: gij-4.1
Version: 4.1.1-20
Severity: normal
File: /usr/bin/gij-wrapper-4.1

This bug report is a variation of bug:
  http://bugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=281602
I've confirmed that bug 281602 was fixed... the source code in that
example used a blocking socket, this example uses a non-blocking socket.


To run:
===
# compile
javac test.java  

# start server
java test

# connect a client, send "foo" and close after 3 seconds
echo "foo" | nc -q 3 localhost 2003
===


If you strace the java test process you should see a bunch of this after
the socket is closed:
===
ioctl(6, FIONREAD, [0])                 = 0
ioctl(6, FIONREAD, [0])                 = 0
ioctl(6, FIONREAD, [0])                 = 0
===

GIJ never actually calls read to determine if the socket was closed,
it just assumes that because no bytes are available to read now, that
it can return 0 to caller.


sample source code:
===
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.Iterator;

public class test {
    public static void main(String[] args) {
        try {
            Selector serverSelector;

            serverSelector = Selector.open();
            ServerSocketChannel ssc = ServerSocketChannel.open();
            ssc.configureBlocking(true);
            ssc.socket().bind(new InetSocketAddress(2003));
            SocketChannel sc = ssc.accept();
            sc.configureBlocking(false);
            while (true) {
                ByteBuffer bb = ByteBuffer.allocate(100);
                int i = sc.read(bb);
                if (i > 0) {
                    System.out.println("Read : " + i + " bytes.");
                    for(int j = 0; j < i; j++) {
                        System.out.print((char)bb.get(j));
                    }
                }
                if (i < 0) {
                    System.out.println("Closing : " + i);
                    sc.close();
                    return;
                }
            }
        } catch(Exception ex) {
        }
    }
}
===


-- System Information:
Debian Release: 4.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-blitz8
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages gij-4.1 depends on:
ii  gcj-4.1-base                4.1.1-20     The GNU Compiler Collection (gcj b
ii  libc6                       2.3.6.ds1-13 GNU C Library: Shared libraries
ii  libgcc1                     1:4.1.1-21   GCC support library
ii  libgcj7-0                   4.1.1-20     Java runtime library for use with 
ii  zlib1g                      1:1.2.3-13   compression library - runtime

gij-4.1 recommends no packages.

-- debconf-show failed


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to