1 /*
2 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
224 return (T) Net.getSocketOption(fd, Net.UNSPEC, name);
225 }
226 }
227
228 private static class DefaultOptionsHolder {
229 static final Set<SocketOption<?>> defaultOptions = defaultOptions();
230
231 private static Set<SocketOption<?>> defaultOptions() {
232 HashSet<SocketOption<?>> set = new HashSet<>(8);
233 set.add(StandardSocketOptions.SO_SNDBUF);
234 set.add(StandardSocketOptions.SO_RCVBUF);
235 set.add(StandardSocketOptions.SO_KEEPALIVE);
236 set.add(StandardSocketOptions.SO_REUSEADDR);
237 set.add(StandardSocketOptions.SO_LINGER);
238 set.add(StandardSocketOptions.TCP_NODELAY);
239 // additional options required by socket adaptor
240 set.add(StandardSocketOptions.IP_TOS);
241 set.add(ExtendedSocketOption.SO_OOBINLINE);
242 if (ExtendedOptionsImpl.flowSupported()) {
243 set.add(jdk.net.ExtendedSocketOptions.SO_FLOW_SLA);
244 }
245 return Collections.unmodifiableSet(set);
246 }
247 }
248
249 @Override
250 public final Set<SocketOption<?>> supportedOptions() {
251 return DefaultOptionsHolder.defaultOptions;
252 }
253
254 private boolean ensureReadOpen() throws ClosedChannelException {
255 synchronized (stateLock) {
256 if (!isOpen())
257 throw new ClosedChannelException();
258 if (!isConnected())
259 throw new NotYetConnectedException();
260 if (!isInputOpen)
261 return false;
262 else
263 return true;
|
1 /*
2 * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
224 return (T) Net.getSocketOption(fd, Net.UNSPEC, name);
225 }
226 }
227
228 private static class DefaultOptionsHolder {
229 static final Set<SocketOption<?>> defaultOptions = defaultOptions();
230
231 private static Set<SocketOption<?>> defaultOptions() {
232 HashSet<SocketOption<?>> set = new HashSet<>(8);
233 set.add(StandardSocketOptions.SO_SNDBUF);
234 set.add(StandardSocketOptions.SO_RCVBUF);
235 set.add(StandardSocketOptions.SO_KEEPALIVE);
236 set.add(StandardSocketOptions.SO_REUSEADDR);
237 set.add(StandardSocketOptions.SO_LINGER);
238 set.add(StandardSocketOptions.TCP_NODELAY);
239 // additional options required by socket adaptor
240 set.add(StandardSocketOptions.IP_TOS);
241 set.add(ExtendedSocketOption.SO_OOBINLINE);
242 if (ExtendedOptionsImpl.flowSupported()) {
243 set.add(jdk.net.ExtendedSocketOptions.SO_FLOW_SLA);
244 }
245 if (ExtendedOptionsImpl.isQuickAckAvailable()) {
246 set.add(jdk.net.ExtendedSocketOptions.SO_QUICKACK);
247 }
248 return Collections.unmodifiableSet(set);
249 }
250 }
251
252 @Override
253 public final Set<SocketOption<?>> supportedOptions() {
254 return DefaultOptionsHolder.defaultOptions;
255 }
256
257 private boolean ensureReadOpen() throws ClosedChannelException {
258 synchronized (stateLock) {
259 if (!isOpen())
260 throw new ClosedChannelException();
261 if (!isConnected())
262 throw new NotYetConnectedException();
263 if (!isInputOpen)
264 return false;
265 else
266 return true;
|