From: TJ Date: Mon, 4 May 2015 15:27:29 +0000 (+0100) Subject: NetworkServerUDP: get actual ephemeral socket address X-Git-Url: https://iam.tj/gitweb/gitweb.cgi?p=WeStealzYourDataz.git;a=commitdiff_plain;h=7bf592f48032770fbc09cd3e55782a7f13ccc1e1 NetworkServerUDP: get actual ephemeral socket address During construction of a service requesting an ephemeral port ensure the services' internal SocketAddress reflects the actual port allocated by the operating system. --- diff --git a/src/uk/ac/ntu/n0521366/wsyd/libs/net/NetworkServerUDP.java b/src/uk/ac/ntu/n0521366/wsyd/libs/net/NetworkServerUDP.java index b514fa8..a6f3fcc 100644 --- a/src/uk/ac/ntu/n0521366/wsyd/libs/net/NetworkServerUDP.java +++ b/src/uk/ac/ntu/n0521366/wsyd/libs/net/NetworkServerUDP.java @@ -104,7 +104,14 @@ public class NetworkServerUDP extends NetworkServerAbstract { @Override public void serverOpen() throws SocketException { _datagramSocket = new DatagramSocket(_socketAddress.getPort(), _socketAddress.getAddress()); - _datagramSocket.setSoTimeout(100); // 1/10th second blocking timeout on receive() + _datagramSocket.setSoTimeout(100); // 1/10th second blocking timeout on receive() + + if (_socketAddress.getPort() == Network.PORTS_EPHEMERAL) { + // reflect the actual port in use if an ephermal port was requested + InetSocketAddress actualSA = (InetSocketAddress)_datagramSocket.getLocalSocketAddress(); + _socketAddress.setAddress(actualSA.getAddress()); + _socketAddress.setPort(actualSA.getPort()); + } } /**