RFR JDK-8024832: (so) ServerSocketChannel.socket().accept() throws IllegalBlockingModeException if not bound

Alan Bateman Alan.Bateman at oracle.com
Tue May 27 13:12:41 UTC 2014


On 27/05/2014 11:19, Pavel Rappo wrote:
> Alan,
>
> I don't think it would be exactly the same behaviour since there's a conditional check (1) before the ssc.accept call:
>
> 	    try {
>                  if (!ssc.isBound())
>                      throw new NotYetBoundException();
>   (1)             if (timeout == 0) {
>                      SocketChannel sc = ssc.accept();
>                      if (sc == null && !ssc.isBlocking())
>                          throw new IllegalBlockingModeException();
>                      return sc.socket();
>                  }
>
>   (2)            ssc.configureBlocking(false);
>                  try {
>                      SocketChannel sc;
>   (3)                if ((sc = ssc.accept()) != null)
>
> So if I remove this explicit check, than depending on condition (1) it can be the case that (3) will be executed after (2). And (2) can throw a bunch of different exceptions, hiding the otherwise initial NotYetBoundException.
>
> If it's not a concern I'm happy to remove this check.
>              
For the no-timeout case then it would be the same. For the timeout case 
it it just means that the channel might be changed to non-blocking 
before the exception is thrown. I don't think this is a problem as it 
will be restored anyway. What you have is fine, I think just removing is 
fine too.

-Alan.


More information about the nio-dev mailing list