Search in sources :

Example 1 with IllegalUnbindException

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);
        }
    }
}
Also used : SctpChannel(com.sun.nio.sctp.SctpChannel) AlreadyBoundException(java.nio.channels.AlreadyBoundException) IllegalUnbindException(com.sun.nio.sctp.IllegalUnbindException) Iterator(java.util.Iterator) ByteBuffer(java.nio.ByteBuffer) MessageInfo(com.sun.nio.sctp.MessageInfo)

Aggregations

IllegalUnbindException (com.sun.nio.sctp.IllegalUnbindException)1 MessageInfo (com.sun.nio.sctp.MessageInfo)1 SctpChannel (com.sun.nio.sctp.SctpChannel)1 ByteBuffer (java.nio.ByteBuffer)1 AlreadyBoundException (java.nio.channels.AlreadyBoundException)1 Iterator (java.util.Iterator)1