Patrick Hunt commented on ZOOKEEPER-517:

I noticed another issue in this same area:


                        if ((k.readyOps() & SelectionKey.OP_ACCEPT) != 0) {
                            SocketChannel sc = ((ServerSocketChannel) k
                            InetAddress ia = sc.socket().getInetAddress();
                            int cnxncount = getClientCnxnCount(ia);
                            if (maxClientCnxns > 0 && cnxncount >= 
                                LOG.warn("Too many connections from " + ia
                                         + " - max is " + maxClientCnxns );

Notice that if macclientcnxns is exceeded we close the connection - iirc 
default linger time on linux is typically 60seconds. So if we have a 
mis-behaving client we can still run into trouble ("still" meaning we added 
this code to keep clients from DOS attacking the server) with TIME_WAIT state 
on the tcp connection.

We need to set the linger time down to 0 in this case before closing.

> NIO factory fails to close connections when the number of file handles run 
> out.
> -------------------------------------------------------------------------------
>                 Key: ZOOKEEPER-517
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-517
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Mahadev konar
>            Priority: Critical
>             Fix For: 3.3.2, 3.4.0
> The code in NIO factory is such that if we fail to accept a connection due to 
> some reasons (too many file handles maybe one of them) we do not close the 
> connections that are in CLOSE_WAIT. We need to call an explicit close on 
> these sockets and then close them. One of the solutions might be to move doIO 
> before accpet so that we can still close connection even if we cannot accept 
> connections.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

Reply via email to