aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/net
diff options
context:
space:
mode:
authorMohan Embar <gnustuff@thisiscool.com>2004-01-30 13:43:21 +0000
committerMohan Embar <membar@gcc.gnu.org>2004-01-30 13:43:21 +0000
commit7dcc98e25c7da0f7eeef93d77d0ead2e5814b019 (patch)
tree49b741adeec23a17d6a07df2869147de34f24174 /libjava/java/net
parentd1615643e511bab93bdf275303aab9468505bc79 (diff)
downloadgcc-7dcc98e25c7da0f7eeef93d77d0ead2e5814b019.zip
gcc-7dcc98e25c7da0f7eeef93d77d0ead2e5814b019.tar.gz
gcc-7dcc98e25c7da0f7eeef93d77d0ead2e5814b019.tar.bz2
* gnu/java/net/PlainSocketImpl.java
(inChannelOperation): New field. (isInChannelOperation): New accessor. (setInChannelOperation): New modifier. * gnu/java/nio/ServerSocketChannelImpl.java (accept): Set and reset our server socket's PlainSocketImpl's "in channel operation" indicator before and after delegating the accept to our server socket. * gnu/java/nio/SocketChannelImpl.java (connect): Set and reset our socket's PlainSocketImpl's "in channel operation" indicator before and after delegating the operation to our socket. (read): Likewise. (write): Likewise. * java/net/ServerSocket.java (implAccept): Don't throw an IllegalBlockingModeException if we have a non-blocking channel which initiated this accept operation. * java/net/Socket.java (connect): Don't throw an IllegalBlockingModeException if we have a non-blocking channel which initiated this connect operation. * java/nio/channels/spi/AbstractSelectableChannel.java (configureBlocking): Only call implConfigureBlocking() if the desired blocking mode is different from our current one. From-SVN: r76956
Diffstat (limited to 'libjava/java/net')
-rw-r--r--libjava/java/net/ServerSocket.java12
-rw-r--r--libjava/java/net/Socket.java10
2 files changed, 17 insertions, 5 deletions
diff --git a/libjava/java/net/ServerSocket.java b/libjava/java/net/ServerSocket.java
index 9a2d82d..a53ebf6 100644
--- a/libjava/java/net/ServerSocket.java
+++ b/libjava/java/net/ServerSocket.java
@@ -1,5 +1,6 @@
/* ServerSocket.java -- Class for implementing server side sockets
- Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -345,9 +346,14 @@ public class ServerSocket
if (isClosed())
throw new SocketException("ServerSocket is closed");
+ // The Sun spec says that if we have an associated channel and
+ // it is in non-blocking mode, we throw an IllegalBlockingModeException.
+ // However, in our implementation if the channel itself initiated this
+ // operation, then we must honor it regardless of its blocking mode.
if (getChannel() != null
- && !getChannel().isBlocking())
- throw new IllegalBlockingModeException();
+ && !getChannel().isBlocking ()
+ && !((PlainSocketImpl) getImpl()).isInChannelOperation())
+ throw new IllegalBlockingModeException ();
impl.accept(socket.getImpl());
}
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index 9322e92..f9cbb7e 100644
--- a/libjava/java/net/Socket.java
+++ b/libjava/java/net/Socket.java
@@ -1,5 +1,6 @@
/* Socket.java -- Client socket implementation
- Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -420,8 +421,13 @@ public class Socket
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException("unsupported address type");
+ // The Sun spec says that if we have an associated channel and
+ // it is in non-blocking mode, we throw an IllegalBlockingModeException.
+ // However, in our implementation if the channel itself initiated this
+ // operation, then we must honor it regardless of its blocking mode.
if (getChannel() != null
- && !getChannel().isBlocking ())
+ && !getChannel().isBlocking ()
+ && !((PlainSocketImpl) getImpl()).isInChannelOperation())
throw new IllegalBlockingModeException ();
if (!isBound ())