jdk/test/java/nio/channels/SocketChannel/OutOfBand.java
author alanb
Wed, 21 Jul 2010 18:08:46 +0100
changeset 6117 471ae95609d5
child 29224 8433f5f46142
permissions -rw-r--r--
6963907: (so) Socket adapter need to implement sendUrgentData Reviewed-by: chegar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6117
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     1
/*
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     2
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     4
 *
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     8
 *
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    13
 * accompanied this code).
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    14
 *
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    18
 *
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    21
 * questions.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    22
 */
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    23
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    24
/* @test
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    25
 * @summary Test socket adapter sendUrgentData method
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    26
 * @bug 6963907
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    27
 */
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    28
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    29
import java.net.*;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    30
import java.nio.ByteBuffer;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    31
import java.nio.channels.*;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    32
import java.io.IOException;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    33
import java.util.Random;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    34
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    35
public class OutOfBand {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    36
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    37
    private static final Random rand = new Random();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    38
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    39
    public static void main(String[] args) throws Exception {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    40
        ServerSocketChannel ssc = null;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    41
        SocketChannel sc1 = null;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    42
        SocketChannel sc2 = null;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    43
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    44
        try {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    45
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    46
            // establish loopback connection
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    47
            ssc = ServerSocketChannel.open().bind(new InetSocketAddress(0));
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    48
            InetAddress lh = InetAddress.getLocalHost();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    49
            SocketAddress remote =
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    50
                new InetSocketAddress(lh, ssc.socket().getLocalPort());
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    51
            sc1 = SocketChannel.open(remote);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    52
            sc2 = ssc.accept();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    53
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    54
            // enable SO_OOBLINE on server side
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    55
            sc2.socket().setOOBInline(true);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    56
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    57
            // run tests
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    58
            test1(sc1, sc2);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    59
            test2(sc1, sc2);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    60
            test3(sc1, sc2);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    61
            test4(sc1);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    62
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    63
        } finally {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    64
            if (sc1 != null) sc1.close();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    65
            if (sc2 != null) sc2.close();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    66
            if (ssc != null) ssc.close();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    67
        }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    68
    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    69
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    70
    /**
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    71
     * Basic test to check that OOB/TCP urgent byte is received.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    72
     */
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    73
    static void test1(SocketChannel client, SocketChannel server)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    74
        throws Exception
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    75
    {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    76
        assert server.socket().getOOBInline();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    77
        ByteBuffer bb = ByteBuffer.allocate(100);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    78
        for (int i=0; i<1000; i++) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    79
            int b1 = -127 + rand.nextInt(384);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    80
            client.socket().sendUrgentData(b1);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    81
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    82
            bb.clear();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    83
            if (server.read(bb) != 1)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    84
                throw new RuntimeException("One byte expected");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    85
            bb.flip();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    86
            byte b2 = bb.get();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    87
            if ((byte)b1 != b2)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    88
                throw new RuntimeException("Unexpected byte");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    89
        }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    90
    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    91
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    92
    /**
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    93
     * Basic test to check that OOB/TCP urgent byte is received, maybe with
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    94
     * OOB mark changing.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    95
     */
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    96
    static void test2(final SocketChannel client, SocketChannel server)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    97
        throws Exception
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    98
    {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
    99
        assert server.socket().getOOBInline();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   100
        Runnable sender = new Runnable() {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   101
            public void run() {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   102
                try {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   103
                    for (int i=0; i<256; i++)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   104
                        client.socket().sendUrgentData(i);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   105
                } catch (IOException ioe) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   106
                    ioe.printStackTrace();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   107
                }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   108
            }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   109
        };
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   110
        Thread thr = new Thread(sender);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   111
        thr.start();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   112
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   113
        ByteBuffer bb = ByteBuffer.allocate(256);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   114
        while (bb.hasRemaining()) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   115
            if (server.read(bb) < 0)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   116
                throw new RuntimeException("Unexpected EOF");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   117
        }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   118
        bb.flip();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   119
        byte expect = 0;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   120
        while (bb.hasRemaining()) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   121
            if (bb.get() != expect)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   122
                throw new RuntimeException("Unexpected byte");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   123
            expect++;
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   124
        }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   125
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   126
        thr.join();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   127
    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   128
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   129
    /**
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   130
     * Test that is close to some real world examples where an urgent byte is
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   131
     * used to "cancel" a long running query or transaction on the server.
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   132
     */
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   133
    static void test3(SocketChannel client, final SocketChannel server)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   134
        throws Exception
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   135
    {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   136
        final int STOP = rand.nextInt(256);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   137
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   138
        assert server.socket().getOOBInline();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   139
        Runnable reader = new Runnable() {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   140
            public void run() {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   141
                ByteBuffer bb = ByteBuffer.allocate(100);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   142
                try {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   143
                    int n = server.read(bb);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   144
                    if (n != 1) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   145
                        String msg = (n < 0) ? "Unexpected EOF" :
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   146
                                               "One byte expected";
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   147
                        throw new RuntimeException(msg);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   148
                    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   149
                    bb.flip();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   150
                    if (bb.get() != (byte)STOP)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   151
                        throw new RuntimeException("Unexpected byte");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   152
                    bb.flip();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   153
                    server.write(bb);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   154
                } catch (IOException ioe) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   155
                    ioe.printStackTrace();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   156
                }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   157
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   158
            }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   159
        };
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   160
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   161
        Thread thr = new Thread(reader);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   162
        thr.start();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   163
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   164
        // "stop" server
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   165
        client.socket().sendUrgentData(STOP);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   166
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   167
        // wait for server reply
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   168
        ByteBuffer bb = ByteBuffer.allocate(100);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   169
        int n = client.read(bb);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   170
        if (n != 1)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   171
            throw new RuntimeException("Unexpected number of bytes");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   172
        bb.flip();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   173
        if (bb.get() != (byte)STOP)
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   174
            throw new RuntimeException("Unexpected reply");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   175
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   176
        thr.join();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   177
    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   178
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   179
    static void test4(SocketChannel sc) throws IOException {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   180
        boolean blocking = sc.isBlocking();
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   181
        sc.configureBlocking(false);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   182
        try {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   183
            sc.socket().sendUrgentData(0);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   184
            throw new RuntimeException("IllegalBlockingModeException expected");
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   185
        } catch (IllegalBlockingModeException x) {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   186
            // expected
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   187
        } finally {
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   188
            sc.configureBlocking(blocking);
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   189
        }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   190
    }
471ae95609d5 6963907: (so) Socket adapter need to implement sendUrgentData
alanb
parents:
diff changeset
   191
}