< prev index next >
src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java
Print this page
rev 57536 : [mq]: Cleanup
*** 1,7 ****
/*
! * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 1403,1416 ****
MembershipRegistry registry = this.registry;
if (registry != null) {
registry.forEach(k -> {
if (k instanceof MembershipKeyImpl.Type6) {
MembershipKeyImpl.Type6 key6 = (MembershipKeyImpl.Type6) k;
! Net.join6(fd, key6.groupAddress(), key6.index(), key6.source());
} else {
MembershipKeyImpl.Type4 key4 = (MembershipKeyImpl.Type4) k;
! Net.join4(fd, key4.groupAddress(), key4.interfaceAddress(), key4.source());
}
});
}
// reset registration in all Selectors that this channel is registered with
--- 1403,1417 ----
MembershipRegistry registry = this.registry;
if (registry != null) {
registry.forEach(k -> {
if (k instanceof MembershipKeyImpl.Type6) {
MembershipKeyImpl.Type6 key6 = (MembershipKeyImpl.Type6) k;
! Net.join6(fd, key6.groupAddress(), key6.interfaceIndex(), key6.source());
} else {
MembershipKeyImpl.Type4 key4 = (MembershipKeyImpl.Type4) k;
! Net.join4(fd, key4.groupAddress(), key4.interfaceIndex(),
! key4.interfaceAddress(), key4.source());
}
});
}
// reset registration in all Selectors that this channel is registered with
*** 1464,1473 ****
--- 1465,1478 ----
throw new IllegalArgumentException("Only IPv6 sockets can join IPv6 multicast group");
} else {
throw new IllegalArgumentException("Address type not supported");
}
+ // network interface, should always be >= 0
+ int index = interf.getIndex();
+ assert index >= 0;
+
// check source address
if (source != null) {
if (source.isAnyLocalAddress())
throw new IllegalArgumentException("Source address is a wildcard address");
if (source.isMulticastAddress())
*** 1495,1521 ****
MembershipKeyImpl key;
if ((family == StandardProtocolFamily.INET6) &&
((group instanceof Inet6Address) || Net.canJoin6WithIPv4Group()))
{
- int index = interf.getIndex();
- if (index == -1)
- throw new IOException("Network interface cannot be identified");
-
// need multicast and source address as byte arrays
byte[] groupAddress = Net.inet6AsByteArray(group);
! byte[] sourceAddress = (source == null) ? null :
! Net.inet6AsByteArray(source);
// join the group
int n = Net.join6(fd, groupAddress, index, sourceAddress);
if (n == IOStatus.UNAVAILABLE)
throw new UnsupportedOperationException();
key = new MembershipKeyImpl.Type6(this, group, interf, source,
! groupAddress, index, sourceAddress);
!
} else {
// need IPv4 address to identify interface
Inet4Address target = Net.anyInet4Address(interf);
if (target == null)
throw new IOException("Network interface not configured for IPv4");
--- 1500,1520 ----
MembershipKeyImpl key;
if ((family == StandardProtocolFamily.INET6) &&
((group instanceof Inet6Address) || Net.canJoin6WithIPv4Group()))
{
// need multicast and source address as byte arrays
byte[] groupAddress = Net.inet6AsByteArray(group);
! byte[] sourceAddress = (source == null) ? null : Net.inet6AsByteArray(source);
// join the group
int n = Net.join6(fd, groupAddress, index, sourceAddress);
if (n == IOStatus.UNAVAILABLE)
throw new UnsupportedOperationException();
key = new MembershipKeyImpl.Type6(this, group, interf, source,
! groupAddress, sourceAddress);
} else {
// need IPv4 address to identify interface
Inet4Address target = Net.anyInet4Address(interf);
if (target == null)
throw new IOException("Network interface not configured for IPv4");
*** 1523,1533 ****
int groupAddress = Net.inet4AsInt(group);
int targetAddress = Net.inet4AsInt(target);
int sourceAddress = (source == null) ? 0 : Net.inet4AsInt(source);
// join the group
! int n = Net.join4(fd, groupAddress, targetAddress, sourceAddress);
if (n == IOStatus.UNAVAILABLE)
throw new UnsupportedOperationException();
key = new MembershipKeyImpl.Type4(this, group, interf, source,
groupAddress, targetAddress, sourceAddress);
--- 1522,1532 ----
int groupAddress = Net.inet4AsInt(group);
int targetAddress = Net.inet4AsInt(target);
int sourceAddress = (source == null) ? 0 : Net.inet4AsInt(source);
// join the group
! int n = Net.join4(fd, groupAddress, index, targetAddress, sourceAddress);
if (n == IOStatus.UNAVAILABLE)
throw new UnsupportedOperationException();
key = new MembershipKeyImpl.Type4(this, group, interf, source,
groupAddress, targetAddress, sourceAddress);
*** 1537,1557 ****
return key;
}
}
@Override
! public MembershipKey join(InetAddress group,
! NetworkInterface interf)
throws IOException
{
return innerJoin(group, interf, null);
}
@Override
! public MembershipKey join(InetAddress group,
! NetworkInterface interf,
! InetAddress source)
throws IOException
{
Objects.requireNonNull(source);
return innerJoin(group, interf, source);
}
--- 1536,1553 ----
return key;
}
}
@Override
! public MembershipKey join(InetAddress group, NetworkInterface interf)
throws IOException
{
return innerJoin(group, interf, null);
}
@Override
! public MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source)
throws IOException
{
Objects.requireNonNull(source);
return innerJoin(group, interf, source);
}
*** 1564,1580 ****
if (!key.isValid())
return;
try {
if (key instanceof MembershipKeyImpl.Type6) {
! MembershipKeyImpl.Type6 key6 =
! (MembershipKeyImpl.Type6)key;
! Net.drop6(fd, key6.groupAddress(), key6.index(), key6.source());
} else {
MembershipKeyImpl.Type4 key4 = (MembershipKeyImpl.Type4)key;
! Net.drop4(fd, key4.groupAddress(), key4.interfaceAddress(),
! key4.source());
}
} catch (IOException ioe) {
// should not happen
throw new AssertionError(ioe);
}
--- 1560,1575 ----
if (!key.isValid())
return;
try {
if (key instanceof MembershipKeyImpl.Type6) {
! MembershipKeyImpl.Type6 key6 = (MembershipKeyImpl.Type6)key;
! Net.drop6(fd, key6.groupAddress(), key6.interfaceIndex(), key6.source());
} else {
MembershipKeyImpl.Type4 key4 = (MembershipKeyImpl.Type4)key;
! Net.drop4(fd, key4.groupAddress(), key4.interfaceIndex(),
! key4.interfaceAddress(), key4.source());
}
} catch (IOException ioe) {
// should not happen
throw new AssertionError(ioe);
}
*** 1621,1637 ****
int n;
if (key instanceof MembershipKeyImpl.Type6) {
MembershipKeyImpl.Type6 key6 =
(MembershipKeyImpl.Type6)key;
! n = Net.block6(fd, key6.groupAddress(), key6.index(),
Net.inet6AsByteArray(source));
} else {
MembershipKeyImpl.Type4 key4 =
(MembershipKeyImpl.Type4)key;
! n = Net.block4(fd, key4.groupAddress(), key4.interfaceAddress(),
! Net.inet4AsInt(source));
}
if (n == IOStatus.UNAVAILABLE) {
// ancient kernel
throw new UnsupportedOperationException();
}
--- 1616,1632 ----
int n;
if (key instanceof MembershipKeyImpl.Type6) {
MembershipKeyImpl.Type6 key6 =
(MembershipKeyImpl.Type6)key;
! n = Net.block6(fd, key6.groupAddress(), key6.interfaceIndex(),
Net.inet6AsByteArray(source));
} else {
MembershipKeyImpl.Type4 key4 =
(MembershipKeyImpl.Type4)key;
! n = Net.block4(fd, key4.groupAddress(), key4.interfaceIndex(),
! key4.interfaceAddress(), Net.inet4AsInt(source));
}
if (n == IOStatus.UNAVAILABLE) {
// ancient kernel
throw new UnsupportedOperationException();
}
*** 1649,1667 ****
if (!key.isValid())
throw new IllegalStateException("key is no longer valid");
try {
if (key instanceof MembershipKeyImpl.Type6) {
! MembershipKeyImpl.Type6 key6 =
! (MembershipKeyImpl.Type6)key;
! Net.unblock6(fd, key6.groupAddress(), key6.index(),
Net.inet6AsByteArray(source));
} else {
! MembershipKeyImpl.Type4 key4 =
! (MembershipKeyImpl.Type4)key;
! Net.unblock4(fd, key4.groupAddress(), key4.interfaceAddress(),
! Net.inet4AsInt(source));
}
} catch (IOException ioe) {
// should not happen
throw new AssertionError(ioe);
}
--- 1644,1660 ----
if (!key.isValid())
throw new IllegalStateException("key is no longer valid");
try {
if (key instanceof MembershipKeyImpl.Type6) {
! MembershipKeyImpl.Type6 key6 = (MembershipKeyImpl.Type6)key;
! Net.unblock6(fd, key6.groupAddress(), key6.interfaceIndex(),
Net.inet6AsByteArray(source));
} else {
! MembershipKeyImpl.Type4 key4 = (MembershipKeyImpl.Type4)key;
! Net.unblock4(fd, key4.groupAddress(), key4.interfaceIndex(),
! key4.interfaceAddress(), Net.inet4AsInt(source));
}
} catch (IOException ioe) {
// should not happen
throw new AssertionError(ioe);
}
< prev index next >