summaryrefslogtreecommitdiff
path: root/java/net/MulticastSocket.java
diff options
context:
space:
mode:
authorRobert Schuster <theBohemian@gmx.net>2006-10-25 00:45:41 +0000
committerRobert Schuster <theBohemian@gmx.net>2006-10-25 00:45:41 +0000
commitf0f853595a72032793c070bd3b63f234465a999e (patch)
tree2b323cb1b039bc90e67167353c5e5be9bff0807e /java/net/MulticastSocket.java
parentc885b93b58ddda402c067ae7f617091cb6e2df15 (diff)
downloadclasspath-f0f853595a72032793c070bd3b63f234465a999e.tar.gz
2006-10-25 Robert Schuster <robertschuster@fsfe.org>
* java/net/MulticastSocket.java: (setNetworkInterface): Rewritten.
Diffstat (limited to 'java/net/MulticastSocket.java')
-rw-r--r--java/net/MulticastSocket.java42
1 files changed, 35 insertions, 7 deletions
diff --git a/java/net/MulticastSocket.java b/java/net/MulticastSocket.java
index 389b6908e..2841192db 100644
--- a/java/net/MulticastSocket.java
+++ b/java/net/MulticastSocket.java
@@ -202,13 +202,41 @@ public class MulticastSocket extends DatagramSocket
{
if (isClosed())
throw new SocketException("socket is closed");
-
- Enumeration e = netIf.getInetAddresses();
-
- if (! e.hasMoreElements())
- throw new SocketException("no network devices found");
-
- InetAddress address = (InetAddress) e.nextElement();
+
+ InetAddress address;
+ if (netIf != null)
+ out:
+ {
+ Enumeration e = netIf.getInetAddresses();
+ if (getLocalAddress() instanceof Inet4Address)
+ {
+ // Search for a IPv4 address.
+ while (e.hasMoreElements())
+ {
+ address = (InetAddress) e.nextElement();
+ if (address instanceof Inet4Address)
+ break out;
+ }
+ throw new SocketException("interface " + netIf.getName() + " has no IPv6 address");
+ }
+ else if (getLocalAddress() instanceof Inet6Address)
+ {
+ // Search for a IPv6 address.
+ while (e.hasMoreElements())
+ {
+ address = (InetAddress) e.nextElement();
+ if (address instanceof Inet6Address)
+ break out;
+ }
+ throw new SocketException("interface " + netIf.getName() + " has no IPv6 address");
+ }
+ else
+ throw new SocketException("interface " + netIf.getName() + " has no suitable IP address");
+ }
+ else
+ address = InetAddress.ANY_IF;
+
+
getImpl().setOption(SocketOptions.IP_MULTICAST_IF, address);
}