我实际上有一个更大的问题,但我减少了它:
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.
}
}
}
}
答案 0 :(得分:1)
Socket.connect()在之前的Socket上调用close()时表现如何,但之前没有尝试连接?
它将抛出SocketException
文本'Socket is closed'。