* 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
This commit is contained in:
parent
d1615643e5
commit
7dcc98e25c
7 changed files with 127 additions and 26 deletions
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue