diff --git a/src/main/java/org/java_websocket/AbstractWebSocket.java b/src/main/java/org/java_websocket/AbstractWebSocket.java index c3e77a089..8801122d2 100644 --- a/src/main/java/org/java_websocket/AbstractWebSocket.java +++ b/src/main/java/org/java_websocket/AbstractWebSocket.java @@ -89,6 +89,12 @@ public abstract class AbstractWebSocket extends WebSocketAdapter { * @since 1.3.9 */ private boolean websocketRunning = false; + /** + * Attribute to start the connectionLostChecker as daemon + * + * @since 1.5.3 + */ + private boolean daemon = false; /** * Attribute to sync on @@ -182,7 +188,7 @@ protected void startConnectionLostTimer() { private void restartConnectionLostTimer() { cancelConnectionLostTimer(); connectionLostCheckerService = Executors - .newSingleThreadScheduledExecutor(new NamedThreadFactory("connectionLostChecker")); + .newSingleThreadScheduledExecutor(new NamedThreadFactory("connectionLostChecker",daemon)); Runnable connectionLostChecker = new Runnable() { /** @@ -308,4 +314,29 @@ public void setReuseAddr(boolean reuseAddr) { this.reuseAddr = reuseAddr; } + + /** + * Getter to daemon + * + * @return whether connectionLostChecker factory spawns threads as daemon + * @since 1.5.3 + */ + public boolean isDaemon() { + return daemon; + } + + /** + * Setter for daemon + *
+ * Enables/disables connectionLostChecker factory spawning daemon threads
+ *
+ * @param daemon whether to enable or disable SO_REUSEADDR
+ * @since 1.5.3
+ */
+ public void setDaemon(boolean daemon) {
+ this.daemon = daemon;
+ }
+
+
+
}
diff --git a/src/main/java/org/java_websocket/client/WebSocketClient.java b/src/main/java/org/java_websocket/client/WebSocketClient.java
index 4277c2209..1491698fc 100644
--- a/src/main/java/org/java_websocket/client/WebSocketClient.java
+++ b/src/main/java/org/java_websocket/client/WebSocketClient.java
@@ -148,6 +148,11 @@ public abstract class WebSocketClient extends AbstractWebSocket implements Runna
* @since 1.4.1
*/
private DnsResolver dnsResolver = null;
+
+ /**
+ * Indicates whether the client should be started as daemon.
+ */
+ private boolean daemon;
/**
* Constructs a WebSocketClient instance and sets it to the connect to the specified URI. The
@@ -372,6 +377,7 @@ public void connect() {
throw new IllegalStateException("WebSocketClient objects are not reuseable");
}
connectReadThread = new Thread(this);
+ connectReadThread.setDaemon(daemon);
connectReadThread.setName("WebSocketConnectReadThread-" + connectReadThread.getId());
connectReadThread.start();
}
@@ -506,6 +512,7 @@ public void run() {
}
writeThread = new Thread(new WebsocketWriteThread(this));
+ writeThread.setDaemon(daemon);
writeThread.start();
byte[] rawbuffer = new byte[WebSocketImpl.RCVBUF];
@@ -983,4 +990,20 @@ private void handleIOException(IOException e) {
}
engine.eot();
}
+
+ /**
+ * Indicates whether the client was started as daemon.
+ */
+ public boolean isDaemon() {
+ return daemon;
+ }
+
+ /**
+ * Indicates whether the client should be started as daemon.
+ */
+ public void setDaemon(boolean daemon) {
+ this.daemon = daemon;
+ //pass it to the AbstractWebSocket too, to use it on the connectionLostChecker thread factory
+ super.setDaemon(daemon);
+ }
}
diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java
index 11073619c..80e0b3f59 100644
--- a/src/main/java/org/java_websocket/server/WebSocketServer.java
+++ b/src/main/java/org/java_websocket/server/WebSocketServer.java
@@ -110,6 +110,10 @@ public abstract class WebSocketServer extends AbstractWebSocket implements Runna
private List