use of com.sun.nio.sctp.IllegalUnbindException in project jdk8u_jdk by JetBrains.
the class Bind method testBindUnbind.
void testBindUnbind(boolean connected) {
SctpChannel channel = null;
SctpChannel peerChannel = null;
debug("testBindUnbind, connected: " + connected);
try {
channel = SctpChannel.open();
List<InetAddress> addresses = Util.getAddresses(true, false);
Iterator iterator = addresses.iterator();
InetSocketAddress a = new InetSocketAddress((InetAddress) iterator.next(), 0);
debug("channel.bind( " + a + ")");
channel.bind(a);
while (iterator.hasNext()) {
InetAddress ia = (InetAddress) iterator.next();
debug("channel.bindAddress(" + ia + ")");
channel.bindAddress(ia);
}
if (debug) {
Util.dumpAddresses(channel, out);
}
if (connected) {
/* Test with connected channel */
peerChannel = connectChannel(channel);
}
/* TEST 1: bind/unbindAddresses on the system addresses */
debug("bind/unbindAddresses on the system addresses");
List<InetAddress> addrs = Util.getAddresses(true, false);
for (InetAddress addr : addrs) {
try {
debug("unbindAddress: " + addr);
check(boundAddress(channel, addr), "trying to remove address that is not bound");
channel.unbindAddress(addr);
if (debug) {
Util.dumpAddresses(channel, out);
}
check(!boundAddress(channel, addr), "address was not removed");
debug("bindAddress: " + addr);
channel.bindAddress(addr);
if (debug) {
Util.dumpAddresses(channel, out);
}
check(boundAddress(channel, addr), "address is not bound");
} catch (IOException ioe) {
unexpected(ioe);
}
}
/* TEST 2: bindAddress - already bound address. */
InetAddress againAddress = addrs.get(0);
try {
debug("bind already bound address " + againAddress);
channel.bindAddress(againAddress);
} catch (AlreadyBoundException unused) {
debug("Caught AlreadyBoundException - OK");
pass();
} catch (IOException ioe) {
unexpected(ioe);
}
/* TEST 3: bind non local address */
try {
InetAddress nla = InetAddress.getByName("123.123.123.123");
debug("bind non local address " + nla);
channel.bindAddress(nla);
} catch (IOException ioe) {
debug("Informative only " + ioe);
}
/* TEST 4: unbind address that is not bound */
try {
debug("unbind address that is not bound " + againAddress);
/* remove address first then again */
channel.unbindAddress(againAddress);
channel.unbindAddress(againAddress);
} catch (IllegalUnbindException unused) {
debug("Caught IllegalUnbindException - OK");
pass();
} catch (IOException ioe) {
unexpected(ioe);
}
/* TEST 5: unbind address that is not bound */
try {
InetAddress nla = InetAddress.getByName("123.123.123.123");
debug("unbind address that is not bound " + nla);
channel.unbindAddress(nla);
} catch (IllegalUnbindException unused) {
debug("Caught IllegalUnbindException - OK");
pass();
} catch (IOException ioe) {
unexpected(ioe);
}
if (connected) {
channel.shutdown();
BindNotificationHandler handler = new BindNotificationHandler();
ByteBuffer buffer = ByteBuffer.allocate(10);
MessageInfo info;
while ((info = peerChannel.receive(buffer, null, handler)) != null) {
if (info != null) {
if (info.bytes() == -1) {
debug("peerChannel Reached EOF");
break;
}
}
}
while ((info = channel.receive(buffer, null, handler)) != null) {
if (info != null) {
if (info.bytes() == -1) {
debug("channel Reached EOF");
break;
}
}
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (channel != null)
channel.close();
} catch (IOException ioe) {
unexpected(ioe);
}
}
}
Aggregations