https://issues.apache.org/bugzilla/show_bug.cgi?id=56416

            Bug ID: 56416
           Summary: HTTP NIO connector: SocketExceptions and performance
                    degradation due to JVM default not being respected for
                    socket linger option
           Product: Tomcat 7
           Version: 7.0.53
          Hardware: PC
            Status: NEW
          Severity: critical
          Priority: P2
         Component: Connectors
          Assignee: dev@tomcat.apache.org
          Reporter: david.lan...@telus.com

According to http connector documentation, JVM defaults will be respected for
socket linger options.  
https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

Seems that linger is being set to false regardless of JVM default.

Setting priority to CRITICAL because on certain Solaris versions, calls to set
linger cause performance problems and SocketExceptions.  I am experiencing this
on my application.  See JVM bug. 
http://bugs.java.com/view_bug.do?bug_id=6799574

Reproducable steps:
1)  Within server.xml, configure NIO http connector without an explicit linger
setting:
    <Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />


2)  Start Tomcat.  

Result: Linger is set to false for http nio connectors regardless of JVM
default. 

Expected:  Linger parameter is not set on sockets.  JVM defaults are used.
Within setProperties method of SocketProperties.java,
breakpoint on line 194 should not be hit for http nio connector
socket.setSoLinger(soLingerOn.booleanValue(), soLingerTime.intValue()); 



Problem is that in the Http11NioProtocol constructor, a hard coded default
value is set: 

    public Http11NioProtocol() {
        .... 
        setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);  // -1
        ....  
    }

Any Java program can change the default socket factory for that JVM.  Tomcat
cannot assume any particular default value for linger.  As per Tomcat's
documentation, Tomcat should not be setting linger on the underlying socket
unless it is specified within server.xml.

I suspect that this applies to other connectors as well e.g. AJP.

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to