diff --git a/engine/src/networking/com/jme3/network/base/KernelAdapter.java b/engine/src/networking/com/jme3/network/base/KernelAdapter.java index 680efa96e..1a266d928 100644 --- a/engine/src/networking/com/jme3/network/base/KernelAdapter.java +++ b/engine/src/networking/com/jme3/network/base/KernelAdapter.java @@ -142,6 +142,10 @@ public class KernelAdapter extends Thread try { HostedConnection source = getConnection(p); + if( source == null ) { + log.log( Level.WARNING, "Recieved message from unconnected endpoint:" + p + " message:" + m ); + return; + } messageDispatcher.messageReceived( source, m ); } catch( Exception e ) { reportError(e); diff --git a/engine/src/networking/com/jme3/network/kernel/udp/UdpEndpoint.java b/engine/src/networking/com/jme3/network/kernel/udp/UdpEndpoint.java index 306674807..acb681cb4 100644 --- a/engine/src/networking/com/jme3/network/kernel/udp/UdpEndpoint.java +++ b/engine/src/networking/com/jme3/network/kernel/udp/UdpEndpoint.java @@ -53,6 +53,7 @@ public class UdpEndpoint implements Endpoint private SocketAddress address; private DatagramSocket socket; private UdpKernel kernel; + private boolean connected = true; // it's connectionless but we track logical state public UdpEndpoint( UdpKernel kernel, long id, SocketAddress address, DatagramSocket socket ) { @@ -85,6 +86,7 @@ public class UdpEndpoint implements Endpoint try { kernel.closeEndpoint(this); + connected = false; } catch( IOException e ) { throw new KernelException( "Error closing endpoint for socket:" + socket, e ); } @@ -102,11 +104,16 @@ public class UdpEndpoint implements Endpoint public boolean isConnected() { - return socket.isConnected(); + // The socket is always unconnected anyway so we track our + // own logical state for the kernel's benefit. + return connected; } public void send( ByteBuffer data ) { + if( !isConnected() ) { + throw new KernelException( "Endpoint is not connected:" + this ); + } try { DatagramPacket p = new DatagramPacket( data.array(), data.position(), data.remaining(), address ); diff --git a/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java b/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java index 904a407f2..6a1669243 100644 --- a/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java +++ b/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java @@ -128,7 +128,7 @@ public class UdpKernel extends AbstractKernel // Does it match the filter? if( filter != null && !filter.apply(p) ) continue; - + // Send the data p.send( data ); }