This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libgcj/13102] New: java.net.Socket#connect doesn't work after java.net.Socket#setSoTimeout


When using java.net.Socket interface introduced in Sun JDK1.4,
which allows for connection timeouts, connection attempt throws:
'Exception in thread "main" java.net.SocketException: Socket closed'.

gcj -v
Reading specs from c:/spool/Java/thisiscool-gcc/gcc-3.4/bin/..
/lib/gcc/i686-pc-mingw32/3.4/specs
Reading specs from c:/spool/Java/thisiscool-gcc/gcc-3.4/bin/..
/lib/gcc/i686-pc-mingw32/3.4/../../../../i686-pc-mingw32/lib/libgcj.spec
rename spec lib to liborig
Configured with: /datal/gcc/gcc/configure --prefix=/datal/gcc/build/wingcc 
--build=i686-pc-linux-gnu --host=i686-pc-mingw32 --target=i686-pc-mingw32 
--enable-languages=c,c++,java --with-gcc --with-gnu-as --with-gnu-ld 
--with-as=i686-pc-mingw32-as --with-ld=i686-pc-mingw32-ld --enable-threads=win32 
--disable-nls --disable-win32-registry --disable-shared --disable-debug 
--without-newlib --enable-libgcj --disable-java-awt --without-x 
--enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter 
--enable-hash-synchronization --enable-sjlj-exceptions --enable-libgcj-multifile
Thread model: win32
gcc version 3.4 20031109 (experimental)

(Version 3.4 20030830 has the same bug too).

Testcase (throws Exception becouse of the bug):

/**
 * New socket interface is important for its connection timeouts.
 */
public class TestSocket {
  protected static void test( boolean set ) throws Exception {
    java.net.SocketAddress sa = new java.net.InetSocketAddress( "gcc.gnu.org", 
80 );
    java.net.Socket socket = new java.net.Socket();
    if( set ){
      // Any of these options leads to "Socket closed" exception.
      socket.setTcpNoDelay( true );
      socket.setSoLinger( false, 1 );
      socket.setSoTimeout( 20 * 1000 );
      socket.setKeepAlive( false );
    }
    socket.connect( sa, 30 * 1000 ); // Timeout is 30 seconds.
    socket.close();
  } 
  public static void main( String[] args ) throws Exception {
    test( false ); System.out.println( "Socket works without options." );
    test( true ); System.out.println( "Socket works with options!" );
  }
}

c:\tmp\testCase>gcj -g3 --main=TestSocket TestSocket.java

c:\tmp\testCase>a.exe
Socket works without options.
Exception in thread "main" java.net.SocketException: Socket closed
   at __ZN10TestSocket4testEb (c:\tmp\testCase\TestSocket.java:11)
   at __ZN10TestSocket4mainEP6JArrayIPN4java4lang6StringEE (c:\tmp\testCase\Test
Socket.java:21)
   at _main (C:\DOCUME~1\Glim\LOCALS~1\Temp\ccY1aaaa.i:11)

c:\tmp\testCase>gcj -O --main=TestSocket TestSocket.java

c:\tmp\testCase>a.exe
Socket works without options.
Exception in thread "main" java.net.SocketException: Socket closed
   at 0x00413d4e (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x00414292 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x004308e4 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x004329f4 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x004326b4 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x00466929 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x00403fb0 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x0040135d (c:\tmp\testCase\natClass.cc)
   at 0x0040142a (c:\tmp\testCase\natClass.cc)
   at 0x00411b2e (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x0041a210 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x00403337 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x00403417 (c:\datal\gcc\gcc\gcc\libgcc2.c)
   at 0x004012d8 (c:\tmp\testCase\natClass.cc)
   at 0x0040117e (c:\tmp\testCase\natClass.cc)
   at 0x00401014 (c:\tmp\testCase\natClass.cc)
   at 0x77e818b5 (Unknown Source)

c:\tmp\testCase>gcj -C TestSocket.java

c:\tmp\testCase>gij TestSocket
Socket works without options.
Exception in thread "main" java.net.SocketException: Socket closed
   at 0x0040bf3e (Unknown Source)
   at 0x0040c482 (Unknown Source)
   at 0x00441d74 (Unknown Source)
   at 0x0043ef44 (Unknown Source)
   at 0x0045a294 (Unknown Source)
   at 0x004f51a9 (Unknown Source)
   at 0x004c4ff0 (Unknown Source)
   at 0x004ad643 (Unknown Source)
   at 0x00458e15 (Unknown Source)
   at 0x00482d14 (Unknown Source)
   at 0x00458c96 (Unknown Source)
   at 0x004ad643 (Unknown Source)
   at 0x00458e15 (Unknown Source)
   at 0x00482d14 (Unknown Source)
   at 0x00458c96 (Unknown Source)
   at 0x004090fe (Unknown Source)
   at 0x00415e00 (Unknown Source)
   at 0x004033c7 (Unknown Source)
   at 0x0040149b (Unknown Source)
   at 0x0040117e (Unknown Source)
   at 0x00401014 (Unknown Source)
   at 0x77e818b5 (Unknown Source)

-- 
           Summary: java.net.Socket#connect doesn't work after
                    java.net.Socket#setSoTimeout
           Product: gcc
           Version: 3.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: libgcj
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: artem at bizlink dot ru
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13102


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]