From 8a0ea780bec19d8cd7bcf6496037e8922218327f Mon Sep 17 00:00:00 2001 From: alanb Date: Fri, 18 Jun 2010 16:16:51 +0100 Subject: 4981129: (dc) DatagramSocket created by DatagramChannel does not provide sender info Reviewed-by: chegar --- src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java | 17 +++++++++-------- .../channels/DatagramChannel/AdaptDatagramSocket.java | 6 ++++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java b/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java index da54a3d64..a59488814 100644 --- a/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java +++ b/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java @@ -171,10 +171,9 @@ public class DatagramSocketAdaptor // Must hold dc.blockingLock() // - private void receive(ByteBuffer bb) throws IOException { + private SocketAddress receive(ByteBuffer bb) throws IOException { if (timeout == 0) { - dc.receive(bb); - return; + return dc.receive(bb); } // Implement timeout with a selector @@ -183,8 +182,9 @@ public class DatagramSocketAdaptor dc.configureBlocking(false); try { int n; - if (dc.receive(bb) != null) - return; + SocketAddress sender; + if ((sender = dc.receive(bb)) != null) + return sender; sel = Util.getTemporarySelector(dc); sk = dc.register(sel, SelectionKey.OP_READ); long to = timeout; @@ -194,8 +194,8 @@ public class DatagramSocketAdaptor long st = System.currentTimeMillis(); int ns = sel.select(to); if (ns > 0 && sk.isReadable()) { - if (dc.receive(bb) != null) - return; + if ((sender = dc.receive(bb)) != null) + return sender; } sel.selectedKeys().remove(sk); to -= System.currentTimeMillis() - st; @@ -222,7 +222,8 @@ public class DatagramSocketAdaptor ByteBuffer bb = ByteBuffer.wrap(p.getData(), p.getOffset(), p.getLength()); - receive(bb); + SocketAddress sender = receive(bb); + p.setSocketAddress(sender); p.setLength(bb.position() - p.getOffset()); } } catch (IOException x) { diff --git a/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java b/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java index 561d7ead4..5a855acbd 100644 --- a/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java +++ b/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java @@ -22,6 +22,7 @@ */ /* @test + * @bug 4313882 4981129 * @summary Unit test for datagram-socket-channel adaptors * @library .. */ @@ -93,6 +94,11 @@ public class AdaptDatagramSocket { if (ip.getData()[ip.getOffset() + i] != op.getData()[op.getOffset() + i]) throw new Exception("Incorrect data received"); + + if (!(ip.getSocketAddress().equals(dst))) { + throw new Exception("Incorrect sender address, expected: " + dst + + " actual: " + ip.getSocketAddress()); + } } static void test(InetSocketAddress dst, -- cgit v1.2.3