From 2291c72439fa59bc518b3f6ac6f428a136747946 Mon Sep 17 00:00:00 2001 From: Jan Bogaerts Date: Tue, 15 Mar 2022 14:35:00 +0100 Subject: [PATCH 1/3] fix: add timeout to socket.receive so socket closes properly on annoying devices --- android/src/main/java/com/tradle/react/UdpReceiverTask.java | 3 +++ android/src/main/java/com/tradle/react/UdpSocketClient.java | 1 + 2 files changed, 4 insertions(+) diff --git a/android/src/main/java/com/tradle/react/UdpReceiverTask.java b/android/src/main/java/com/tradle/react/UdpReceiverTask.java index 16254a0b..6693aecb 100644 --- a/android/src/main/java/com/tradle/react/UdpReceiverTask.java +++ b/android/src/main/java/com/tradle/react/UdpReceiverTask.java @@ -48,6 +48,9 @@ public void run() { final String base64Data = Base64.encodeToString(packet.getData(), packet.getOffset(), packet.getLength(), Base64.NO_WRAP); receiverListener.didReceiveData(base64Data, address.getHostAddress(), packet.getPort()); + } catch(java.net.SocketTimeoutException timeout) { // receive timed-out, needed to get out of the loop when socket gets closed + continue; + } } catch (IOException ioe) { if (receiverListener != null) { receiverListener.didReceiveError(ioe.getMessage()); diff --git a/android/src/main/java/com/tradle/react/UdpSocketClient.java b/android/src/main/java/com/tradle/react/UdpSocketClient.java index 79946577..27a12bd3 100644 --- a/android/src/main/java/com/tradle/react/UdpSocketClient.java +++ b/android/src/main/java/com/tradle/react/UdpSocketClient.java @@ -75,6 +75,7 @@ public void bind(Integer port, @Nullable String address) throws IOException { mSocket = new MulticastSocket(socketAddress); mSocket.setReuseAddress(true); + msocket.setSoTimeout(500); // begin listening for data in the background mReceiverTask = new UdpReceiverTask(mSocket, this); From 03ca9ddb366ab13fa99e261bdb5ecb825a7f2313 Mon Sep 17 00:00:00 2001 From: Jan Bogaerts Date: Tue, 15 Mar 2022 16:09:44 +0100 Subject: [PATCH 2/3] fix: broken catch --- android/src/main/java/com/tradle/react/UdpReceiverTask.java | 1 - 1 file changed, 1 deletion(-) diff --git a/android/src/main/java/com/tradle/react/UdpReceiverTask.java b/android/src/main/java/com/tradle/react/UdpReceiverTask.java index 6693aecb..22a7e5b7 100644 --- a/android/src/main/java/com/tradle/react/UdpReceiverTask.java +++ b/android/src/main/java/com/tradle/react/UdpReceiverTask.java @@ -50,7 +50,6 @@ public void run() { receiverListener.didReceiveData(base64Data, address.getHostAddress(), packet.getPort()); } catch(java.net.SocketTimeoutException timeout) { // receive timed-out, needed to get out of the loop when socket gets closed continue; - } } catch (IOException ioe) { if (receiverListener != null) { receiverListener.didReceiveError(ioe.getMessage()); From ed798d49f24b85bb4ea24a83919d281587b3ffb5 Mon Sep 17 00:00:00 2001 From: Jan Bogaerts Date: Tue, 15 Mar 2022 16:15:43 +0100 Subject: [PATCH 3/3] typo --- android/src/main/java/com/tradle/react/UdpSocketClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/tradle/react/UdpSocketClient.java b/android/src/main/java/com/tradle/react/UdpSocketClient.java index 27a12bd3..214689ea 100644 --- a/android/src/main/java/com/tradle/react/UdpSocketClient.java +++ b/android/src/main/java/com/tradle/react/UdpSocketClient.java @@ -75,7 +75,7 @@ public void bind(Integer port, @Nullable String address) throws IOException { mSocket = new MulticastSocket(socketAddress); mSocket.setReuseAddress(true); - msocket.setSoTimeout(500); + mSocket.setSoTimeout(500); // begin listening for data in the background mReceiverTask = new UdpReceiverTask(mSocket, this);