From c84ee5906d9eec1122bcd768f6256744d351f322 Mon Sep 17 00:00:00 2001 From: membar Date: Fri, 30 Jan 2004 13:43:21 +0000 Subject: * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76956 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/java/net/Socket.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'libjava/java/net/Socket.java') diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java index 9322e929ec3..f9cbb7e6cb3 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 ()) -- cgit v1.2.1