Bug in java.net.Socket close() behavior?

Joseph Gleason fireduck at gmail.com
Mon Oct 16 12:26:10 PDT 2006


I have been informed that attachments are removed automaticly.

Here is the code to the test program:
import java.net.Socket;
import java.io.InputStream;

public class SocketCloseStreamTest
{
        public static void main(String Args[]) throws Exception
        {
                new SocketCloseStreamTest();

        }
        public SocketCloseStreamTest() throws Exception
        {

                Socket S=new Socket("tesla.fireduck.com",22);
                new ReadThread(S.getInputStream()).start();

                Thread.sleep(2000);
                S.close();
                System.out.println("Socket closed.  Should see socket
closed exception.");

                Thread.sleep(2000);
        }


        public class ReadThread extends Thread
        {
                InputStream In;
                public ReadThread(InputStream in)
                {
                        In=in;
                }
                public void run()
                {
                        try
                        {
                                int BlockSz=1024;
                                byte[] buff=new byte[BlockSz];
                                while(true)
                                {
                                        int readsize=In.read(buff,0,BlockSz);
                                        System.out.print("In: ");
                                        System.out.write(buff,0,readsize);
                                        System.out.println();



                                }
                        }
                        catch(Exception e)
                        {
                                e.printStackTrace();
                        }
                }
        }


}


On 10/16/06, Joseph Gleason <fireduck at gmail.com> wrote:
> According to the API for java.net.Socket close():
>
> "Any thread currently blocked in an I/O operation upon this socket
> will throw a SocketException."
>
> http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#close()
>
> I have observed that java 1.5 on FreeBSD does not follow this while
> the Windows and Linux ones I have tested do.  On the FreeBSD runtimes
> that I have tested, a thread blocked on reading a socket just hangs
> forever if the socket is closed.
>
> Attached is a simple program that tests this behavior.  It just
> connects to a port on one of my servers and has a reader thread
> watching input from the socket and closes the socket in a different
> thread to see if the reader thread gets an exception.
>
> Java runtimes that I have tested this on:
> # java -version
> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build diablo-1.5.0-b01)
> Java HotSpot(TM) 64-Bit Server VM (build diablo-1.5.0_07-b01, mixed mode)
>
> # java -version
> java version "1.5.0-p2"
> Java(TM) 2 Runtime Environment, Standard Edition (build
> 1.5.0-p2-root_07_mar_2006_02_41)
> Java HotSpot(TM) 64-Bit Server VM (build
> 1.5.0-p2-root_07_mar_2006_02_41, mixed mode)
>
>
>


More information about the freebsd-java mailing list