From ec34b59ad37e4497f1084ef06302ddb260b6aa92 Mon Sep 17 00:00:00 2001 From: Manevolent Date: Mon, 17 Sep 2018 22:55:34 -0400 Subject: [PATCH] DatagramPackets are synchronized. This could have caused problems, or would, cause problems. --- .../socket/client/LocalTeamspeakClientSocket.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java index 7a55749..ff3d362 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java @@ -44,8 +44,6 @@ public class LocalTeamspeakClientSocket private DatagramSocket socket; - private final DatagramPacket packet = new DatagramPacket(new byte[500], 500); - private final Map namedProcessors = new HashMap<>(); private ExecutorService commandExecutionService = Executors.newSingleThreadExecutor(); private final Object commandSendLock = new Object(); @@ -198,6 +196,7 @@ public class LocalTeamspeakClientSocket DatagramSocket socket = this.socket; InetSocketAddress remote = this.remote; + final DatagramPacket packet = new DatagramPacket(new byte[500], 500); while (socket.isBound()) { socket.setSoTimeout(timeout); @@ -341,15 +340,24 @@ public class LocalTeamspeakClientSocket Ts3Debugging.debug("Connecting to " + remote + "..."); + // Set clid setClientId(0); + // Resolve remote if (remote.isUnresolved()) remote = new InetSocketAddress(remote.getAddress().getHostAddress(), remote.getPort()); - if (socket != null) socket.close(); + // Release old socket (if any) + if (socket != null && !socket.isClosed()) + socket.close(); + + // Construct new socket socket = new DatagramSocket(); + // Bind to remote this.remote = remote; + + // Free stuff serverId = null; awaitingCommands.clear(); acceptingReturnCode = 0;