src/jdk.net/linux/classes/jdk/internal/net/rdma/RdmaSocketProvider.java
author bpb
Wed, 06 Feb 2019 12:48:01 -0800
branchrsocket-branch
changeset 57156 81e4a12fd1a4
parent 57115 512e7cc6ccce
child 57160 c502c299d41e
permissions -rw-r--r--
rsocket-branch: change recent copyright year to 2019 and new files to 2019 only
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57115
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     1
/*
57156
81e4a12fd1a4 rsocket-branch: change recent copyright year to 2019 and new files to 2019 only
bpb
parents: 57115
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
57115
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     4
 *
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    10
 *
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    15
 * accompanied this code).
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    16
 *
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    20
 *
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    23
 * questions.
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    24
 */
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    25
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    26
package jdk.internal.net.rdma;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    27
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    28
import java.io.IOException;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    29
import java.net.ProtocolFamily;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    30
import java.net.ServerSocket;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    31
import java.net.Socket;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    32
import java.net.SocketException;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    33
import java.net.SocketImpl;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    34
import java.net.SocketOption;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    35
import java.net.SocketOptions;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    36
import java.net.StandardSocketOptions;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    37
import java.util.HashMap;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    38
import java.util.Map;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    39
import java.util.Set;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    40
import jdk.net.RdmaSocketOptions;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    41
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    42
public class RdmaSocketProvider {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    43
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    44
    static class RdmaClientSocketImpl extends RdmaSocketImpl {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    45
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    46
        private final Set<SocketOption<?>> options =
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    47
                Set.of(StandardSocketOptions.SO_SNDBUF,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    48
                       StandardSocketOptions.SO_RCVBUF,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    49
                       StandardSocketOptions.SO_REUSEADDR,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    50
                       StandardSocketOptions.TCP_NODELAY,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    51
                       RdmaSocketOptions.RDMA_SQSIZE,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    52
                       RdmaSocketOptions.RDMA_RQSIZE,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    53
                       RdmaSocketOptions.RDMA_INLINE);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    54
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    55
        RdmaClientSocketImpl(ProtocolFamily family) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    56
            super(family);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    57
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    58
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    59
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    60
        public Set<SocketOption<?>> supportedOptions() {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    61
            return options;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    62
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    63
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    64
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    65
        protected <T> void setOption(SocketOption<T> name, T value)
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    66
                throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    67
            if (!rdmaOptions.isOptionSupported(name)) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    68
                int opt;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    69
                if (name == StandardSocketOptions.SO_SNDBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    70
                    opt = SocketOptions.SO_SNDBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    71
                } else if (name == StandardSocketOptions.SO_RCVBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    72
                    opt = SocketOptions.SO_RCVBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    73
                } else if (name == StandardSocketOptions.SO_REUSEADDR) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    74
                    opt = SocketOptions.SO_REUSEADDR;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    75
                } else if (name == StandardSocketOptions.TCP_NODELAY) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    76
                    opt = SocketOptions.TCP_NODELAY;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    77
                } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    78
                    throw new UnsupportedOperationException(
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    79
                            "unsupported option: " + name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    80
                }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    81
                setOption(opt, value);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    82
            } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    83
                rdmaOptions.setOption(fd, name, value);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    84
            }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    85
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    86
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    87
        @SuppressWarnings("unchecked")
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    88
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    89
        protected <T> T getOption(SocketOption<T> name) throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    90
            Object value;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    91
            if (!rdmaOptions.isOptionSupported(name)) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    92
                int opt;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    93
                if (name == StandardSocketOptions.SO_SNDBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    94
                    opt = SocketOptions.SO_SNDBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    95
                } else if (name == StandardSocketOptions.SO_RCVBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    96
                    opt = SocketOptions.SO_RCVBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    97
                } else if (name == StandardSocketOptions.SO_REUSEADDR) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    98
                    opt = SocketOptions.SO_REUSEADDR;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
    99
                } else if (name == StandardSocketOptions.TCP_NODELAY) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   100
                    opt = SocketOptions.TCP_NODELAY;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   101
                } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   102
                    throw new UnsupportedOperationException(
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   103
                            "unsupported option: " + name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   104
                }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   105
                value = getOption(opt);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   106
            } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   107
                value = rdmaOptions.getOption(fd, name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   108
            }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   109
            return (T) value;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   110
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   111
    }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   112
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   113
    static class RdmaServerSocketImpl extends RdmaSocketImpl {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   114
        private final Set<SocketOption<?>> options =
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   115
                Set.of(StandardSocketOptions.SO_RCVBUF,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   116
                       StandardSocketOptions.SO_REUSEADDR,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   117
                       RdmaSocketOptions.RDMA_SQSIZE,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   118
                       RdmaSocketOptions.RDMA_RQSIZE,
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   119
                       RdmaSocketOptions.RDMA_INLINE);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   120
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   121
        RdmaServerSocketImpl(ProtocolFamily family) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   122
            super(family);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   123
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   124
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   125
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   126
        public Set<SocketOption<?>> supportedOptions() {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   127
            return options;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   128
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   129
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   130
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   131
        protected <T> void setOption(SocketOption<T> name, T value)
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   132
                throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   133
            if (!rdmaOptions.isOptionSupported(name)) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   134
                int opt;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   135
                if (name == StandardSocketOptions.SO_RCVBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   136
                    opt = SocketOptions.SO_RCVBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   137
                } else if (name == StandardSocketOptions.SO_REUSEADDR) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   138
                    opt = SocketOptions.SO_REUSEADDR;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   139
                } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   140
                    throw new UnsupportedOperationException(
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   141
                            "unsupported option: " + name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   142
                }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   143
                setOption(opt, value);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   144
            } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   145
                rdmaOptions.setOption(fd, name, value);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   146
            }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   147
        }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   148
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   149
        @SuppressWarnings("unchecked")
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   150
        @Override
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   151
        protected <T> T getOption(SocketOption<T> name) throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   152
            Object value;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   153
            if (!rdmaOptions.isOptionSupported(name)) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   154
                int opt;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   155
                if (name == StandardSocketOptions.SO_RCVBUF) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   156
                    opt = SocketOptions.SO_RCVBUF;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   157
                } else if (name == StandardSocketOptions.SO_REUSEADDR) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   158
                    opt = SocketOptions.SO_REUSEADDR;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   159
                } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   160
                    throw new UnsupportedOperationException(
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   161
                            "unsupported option: " + name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   162
                }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   163
                value = getOption(opt);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   164
            } else {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   165
                value = rdmaOptions.getOption(fd, name);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   166
            }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   167
            return (T) value;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   168
         }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   169
    }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   170
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   171
    public static Socket openSocket(ProtocolFamily family) throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   172
        return new Socket(new RdmaClientSocketImpl(family)) {  };
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   173
    }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   174
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   175
    public static ServerSocket openServerSocket(ProtocolFamily family)
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   176
            throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   177
        return new ServerSocket(new RdmaServerSocketImpl(family)) {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   178
            public Socket accept() throws IOException {
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   179
                if (isClosed())
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   180
                    throw new SocketException("Socket is closed");
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   181
                if (!isBound())
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   182
                    throw new SocketException("Socket is not bound yet");
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   183
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   184
                Socket s = openSocket(family);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   185
                implAccept(s);
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   186
                return s;
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   187
            }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   188
        };
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   189
    }
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   190
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   191
    private RdmaSocketProvider() {}
512e7cc6ccce Initial load of JEP 337 implementation
alanb
parents:
diff changeset
   192
}