Index: src/test/java/tests/api/java/net/MulticastSocketTest.java =================================================================== --- src/test/java/tests/api/java/net/MulticastSocketTest.java (revision 478529) +++ src/test/java/tests/api/java/net/MulticastSocketTest.java (working copy) @@ -990,7 +990,47 @@ handleException(e, SO_USELOOPBACK); } } + + /** + * @tests java.net.MulticastSocket#setLoopbackMode(boolean) + */ + public void test_setLoopbackModeSendReceive() throws IOException{ + final String ADDRESS = "224.1.2.3"; + final int PORT = 6789; + final String message = "Hello, world!"; + // test send receive + MulticastSocket socket = null; + try { + // open a multicast socket + socket = new MulticastSocket(PORT); + socket.setLoopbackMode(false); // false indecates doing loop back + socket.joinGroup(InetAddress.getByName(ADDRESS)); + + // send the datagram + byte[] sendData = message.getBytes(); + DatagramPacket sendDatagram = new DatagramPacket(sendData, 0, + sendData.length, new InetSocketAddress(InetAddress + .getByName(ADDRESS), PORT)); + socket.send(sendDatagram); + + // receive the datagram + byte[] recvData = new byte[100]; + DatagramPacket recvDatagram = new DatagramPacket(recvData, + recvData.length); + socket.setSoTimeout(5000); // prevent eternal block in + // socket.receive() + socket.receive(recvDatagram); + String recvMessage = new String(recvData, 0, recvDatagram + .getLength()); + assertEquals(message, recvMessage); + }finally { + if (socket != null) + socket.close(); + } + } + + /** * @tests java.net.MulticastSocket#setReuseAddress(boolean) */ Index: src/main/java/java/net/MulticastSocket.java =================================================================== --- src/main/java/java/net/MulticastSocket.java (revision 478529) +++ src/main/java/java/net/MulticastSocket.java (working copy) @@ -608,7 +608,7 @@ */ public boolean getLoopbackMode() throws SocketException { checkClosedAndBind(false); - return ((Boolean) impl.getOption(SocketOptions.IP_MULTICAST_LOOP)) + return !((Boolean) impl.getOption(SocketOptions.IP_MULTICAST_LOOP)) .booleanValue(); } @@ -625,7 +625,7 @@ */ public void setLoopbackMode(boolean loop) throws SocketException { checkClosedAndBind(false); - impl.setOption(SocketOptions.IP_MULTICAST_LOOP, loop ? Boolean.TRUE - : Boolean.FALSE); + impl.setOption(SocketOptions.IP_MULTICAST_LOOP, loop ? Boolean.FALSE + : Boolean.TRUE); } }