aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/sun/nio/ch/ServerSocketAdaptor.java')
-rw-r--r--src/share/classes/sun/nio/ch/ServerSocketAdaptor.java32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java b/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
index 4357ffc4e7..63574acc78 100644
--- a/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
+++ b/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,20 @@
package sun.nio.ch;
-import java.io.*;
-import java.net.*;
-import java.nio.channels.*;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketException;
+import java.net.SocketTimeoutException;
+import java.net.StandardSocketOptions;
+import java.nio.channels.ClosedChannelException;
+import java.nio.channels.IllegalBlockingModeException;
+import java.nio.channels.NotYetBoundException;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
// Make a server-socket channel look like a server socket.
@@ -37,7 +48,7 @@ import java.nio.channels.*;
// class.
//
-public class ServerSocketAdaptor // package-private
+class ServerSocketAdaptor // package-private
extends ServerSocket
{
@@ -97,12 +108,16 @@ public class ServerSocketAdaptor // package-private
throw new IllegalBlockingModeException();
try {
if (timeout == 0) {
+ // for compatibility reasons: accept connection if available
+ // when configured non-blocking
SocketChannel sc = ssc.accept();
if (sc == null && !ssc.isBlocking())
throw new IllegalBlockingModeException();
return sc.socket();
}
+ if (!ssc.isBlocking())
+ throw new IllegalBlockingModeException();
ssc.configureBlocking(false);
try {
SocketChannel sc;
@@ -121,10 +136,10 @@ public class ServerSocketAdaptor // package-private
throw new SocketTimeoutException();
}
} finally {
- if (ssc.isOpen())
+ try {
ssc.configureBlocking(true);
+ } catch (ClosedChannelException e) { }
}
-
} catch (Exception x) {
Net.translateException(x);
assert false;
@@ -178,8 +193,7 @@ public class ServerSocketAdaptor // package-private
if (!isBound())
return "ServerSocket[unbound]";
return "ServerSocket[addr=" + getInetAddress() +
- // ",port=" + getPort() +
- ",localport=" + getLocalPort() + "]";
+ ",localport=" + getLocalPort() + "]";
}
public void setReceiveBufferSize(int size) throws SocketException {