diff options
author | Mohan Embar <gnustuff@thisiscool.com> | 2004-01-30 13:43:21 +0000 |
---|---|---|
committer | Mohan Embar <membar@gcc.gnu.org> | 2004-01-30 13:43:21 +0000 |
commit | 7dcc98e25c7da0f7eeef93d77d0ead2e5814b019 (patch) | |
tree | 49b741adeec23a17d6a07df2869147de34f24174 /libjava/java/net | |
parent | d1615643e511bab93bdf275303aab9468505bc79 (diff) | |
download | gcc-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.java | 12 | ||||
-rw-r--r-- | libjava/java/net/Socket.java | 10 |
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 ()) |