关闭后但在连接之前的Socket.connect

时间:2014-02-21 22:58:17

标签: java multithreading sockets synchronization

我实际上有一个更大的问题,但我减少了它:

Socket.connect()之前在Socket上调用close()时的行为如何,但之前没有尝试过连接?

多线程/线程是相关的,因为我有一个正在进行连接的线程和一个调用它的线程,并且可能在连接之前中止连接。由于多线程的乐趣,可以在实际调用connect()之前进行中止,即使我synchronized - 之前使用布尔检查。 (假设在connect()正在执行其工作之前调用中止代码,但在调用connect()之后 - 例如在方法的开头。)

一些代码,大幅缩减:

public class Connecter {
    private Socket socket;

    public void connect() {
        // start the connecting thread, synchronized
    }

    public void abort() {
        // synchronized as well: closes the socket, nulls the refernce, sets a boolean value to true (aborted)
    }

    private class ConnectingThread extends Thread {
        public void run() {
            try {
                // synchronized: create a socket object and set stuff such as TCP_NODELAY
                socket.connect(new InetSocketAddress(ip, port));
                // handle stuff afterwards, synced of course
            } catch (Exception ex) {
                // wow. such exceptions. much handling.
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

Socket.connect()在之前的Socket上调用close()时表现如何,但之前没有尝试连接?

它将抛出SocketException文本'Socket is closed'。