tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fha...@apache.org
Subject svn commit: r703017 - in /tomcat/trunk: java/org/apache/coyote/http11/Http11Protocol.java java/org/apache/tomcat/util/net/JIoEndpoint.java webapps/docs/config/http.xml
Date Wed, 08 Oct 2008 23:28:53 GMT
Author: fhanik
Date: Wed Oct  8 16:28:51 2008
New Revision: 703017

URL: http://svn.apache.org/viewvc?rev=703017&view=rev
Log:
Expose all socket settings available for the JIO connector, buffer size can make large differences,
but they are hidden
Make settings consistent with those for the NIO connector, so switching between Java connectors
is seamless

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
    tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
    tomcat/trunk/webapps/docs/config/http.xml

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=703017&r1=703016&r2=703017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Wed Oct  8 16:28:51 2008
@@ -123,8 +123,12 @@
     /**
      * Set a property.
      */
-    public void setProperty(String name, String value) {
+    public boolean setProperty(String name, String value) {
         setAttribute(name, value);
+        if (name.startsWith("socket.")) {
+            return endpoint.setProperty(name, value);
+        }
+        return true;
     }
 
     /**

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=703017&r1=703016&r2=703017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Wed Oct  8 16:28:51 2008
@@ -26,6 +26,7 @@
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.IntrospectionUtils;
 import org.apache.tomcat.util.res.StringManager;
 
 /**
@@ -127,11 +128,32 @@
      * Associated server socket.
      */
     protected ServerSocket serverSocket = null;
+    
+    /**
+     * Holds all the socket properties
+     */
+    protected SocketProperties socketProperties = new SocketProperties();
 
 
     // ------------------------------------------------------------- Properties
 
-
+    /**
+     * Generic properties - currently only socket.XXX properties
+     */
+    public boolean setProperty(String name, String value) {
+        final String socketName = "socket.";
+        try {
+            if (name.startsWith(socketName)) {
+                return IntrospectionUtils.setProperty(socketProperties, name.substring(socketName.length()),
value);
+            } else {
+                return IntrospectionUtils.setProperty(this,name,value);
+            }
+        }catch ( Exception x ) {
+            log.error("Unable to set attribute \""+name+"\" to \""+value+"\"",x);
+            return false;
+        }
+    }
+    
     /**
      * Acceptor thread count.
      */
@@ -201,25 +223,30 @@
     /**
      * Socket TCP no delay.
      */
-    protected boolean tcpNoDelay = false;
-    public boolean getTcpNoDelay() { return tcpNoDelay; }
-    public void setTcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; }
+    public boolean getTcpNoDelay() { return socketProperties.getTcpNoDelay(); }
+    public void setTcpNoDelay(boolean tcpNoDelay) { socketProperties.setTcpNoDelay(tcpNoDelay);
}
 
 
     /**
      * Socket linger.
      */
-    protected int soLinger = 100;
-    public int getSoLinger() { return soLinger; }
-    public void setSoLinger(int soLinger) { this.soLinger = soLinger; }
+    public int getSoLinger() {return socketProperties.getSoLingerTime();}
+    public void setSoLinger(int soLinger) { 
+        if (soLinger>=0) {
+            socketProperties.setSoLingerOn(true);
+            socketProperties.setSoLingerTime(soLinger);
+        } else {
+            socketProperties.setSoLingerOn(false);
+            socketProperties.setSoLingerTime(-1);
+        }
+    }
 
 
     /**
      * Socket timeout.
      */
-    protected int soTimeout = -1;
-    public int getSoTimeout() { return soTimeout; }
-    public void setSoTimeout(int soTimeout) { this.soTimeout = soTimeout; }
+    public int getSoTimeout() { return socketProperties.getSoTimeout(); }
+    public void setSoTimeout(int soTimeout) { socketProperties.setSoTimeout(soTimeout); }
 
 
     /**
@@ -617,16 +644,7 @@
         try {
 
             // 1: Set socket options: timeout, linger, etc
-            if (soLinger >= 0) { 
-                socket.setSoLinger(true, soLinger);
-            }
-            if (tcpNoDelay) {
-                socket.setTcpNoDelay(tcpNoDelay);
-            }
-            if (soTimeout > 0) {
-                socket.setSoTimeout(soTimeout);
-            }
-
+            socketProperties.setProperties(socket);
             // 2: SSL handshake
             step = 2;
             serverSocketFactory.handshake(socket);

Modified: tomcat/trunk/webapps/docs/config/http.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=703017&r1=703016&r2=703017&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/trunk/webapps/docs/config/http.xml Wed Oct  8 16:28:51 2008
@@ -383,6 +383,52 @@
     </attribute>
 
   </attributes>
+  <subsection name="Java TCP socket attributes">
+  
+      <attribute name="socket.rxBufSize" required="false">
+        <p>(int)The socket receive buffer (SO_RCVBUF) size in bytes. Default value
is <code>25188</code></p>
+      </attribute>
+      <attribute name="socket.txBufSize" required="false">
+        <p>(int)The socket send buffer (SO_SNDBUF) size in bytes. Default value is
<code>43800</code></p>
+      </attribute>
+      <attribute name="socket.tcpNoDelay" required="false">
+        <p>(bool)same as the standard setting <code>tcpNoDelay</code>.
Default value is <code>false</code></p>
+      </attribute>
+      <attribute name="socket.soKeepAlive" required="false">
+        <p>(bool)Boolean value for the socket's keep alive setting (SO_KEEPALIVE).
Default is <code>false</code>. </p>
+      </attribute>
+      <attribute name="socket.ooBInline" required="false">
+        <p>(bool)Boolean value for the socket OOBINLINE setting. Default value is <code>true</code></p>
+      </attribute>
+      <attribute name="socket.soReuseAddress" required="false">
+        <p>(bool)Boolean value for the sockets reuse address option (SO_REUSEADDR).
Default value is <code>true</code></p>
+      </attribute>
+      <attribute name="socket.soLingerOn" required="false">
+        <p>(bool)Boolean value for the sockets so linger option (SO_LINGER). Default
value is <code>true</code>.
+           This option is paired with the <code>soLingerTime</code> value.</p>
+      </attribute>
+      <attribute name="socket.soLingerTime" required="false">
+        <p>(bool)Value in seconds for the sockets so linger option (SO_LINGER). Default
value is <code>25</code> seconds.
+           This option is paired with the soLinger value.</p>
+      </attribute>
+      <attribute name="socket.soTimeout" required="false">
+        <p>(int)Value in milliseconds for the sockets read timeout (SO_TIMEOUT). Default
value is <code>5000</code> milliseconds.</p>
+      </attribute>      
+      <attribute name="socket.soTrafficClass" required="false">
+        <p>(byte)Value between <code>0</code> and <code>255</code>
for the traffic class on the socket, <code>0x04 | 0x08 | 0x010</code></p>
+      </attribute>      
+      <attribute name="socket.performanceConnectionTime" required="false">
+        <p>(int)The first value for the performance settings. Default is <code>1</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
+      </attribute>      
+      <attribute name="socket.performanceLatency" required="false">
+        <p>(int)The second value for the performance settings. Default is <code>0</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
+      </attribute>      
+      <attribute name="socket.performanceBandwidth" required="false">
+        <p>(int)The third value for the performance settings. Default is <code>1</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
+      </attribute>      
+  
+
+  </subsection>
 
   </subsection>
   
@@ -458,12 +504,6 @@
            <br/>When you are using direct buffers, make sure you allocate the appropriate
amount of memory for the 
                 direct memory space. On Sun's JDK that would be something like <code>-XX:MaxDirectMemorySize=256m</code></p>
       </attribute>
-      <attribute name="socket.rxBufSize" required="false">
-        <p>(int)The socket receive buffer (SO_RCVBUF) size in bytes. Default value
is <code>25188</code></p>
-      </attribute>
-      <attribute name="socket.txBufSize" required="false">
-        <p>(int)The socket send buffer (SO_SNDBUF) size in bytes. Default value is
<code>43800</code></p>
-      </attribute>
       <attribute name="socket.appReadBufSize" required="false">
         <p>(int)Each connection that is opened up in Tomcat get associated with a read
and a write ByteBuffer
            This attribute controls the size of these buffers. By default this read buffer
is sized at <code>8192</code> bytes.
@@ -511,41 +551,6 @@
            The default is <code>500</code>.
            Other values are <code>-1</code>. unlimited cache, and <code>0</code>,
no cache.</p>
       </attribute>
-      <attribute name="socket.tcpNoDelay" required="false">
-        <p>(bool)same as the standard setting <code>tcpNoDelay</code>.
Default value is <code>false</code></p>
-      </attribute>
-      <attribute name="socket.soKeepAlive" required="false">
-        <p>(bool)Boolean value for the socket's keep alive setting (SO_KEEPALIVE).
Default is <code>false</code>. </p>
-      </attribute>
-      <attribute name="socket.ooBInline" required="false">
-        <p>(bool)Boolean value for the socket OOBINLINE setting. Default value is <code>true</code></p>
-      </attribute>
-      <attribute name="socket.soReuseAddress" required="false">
-        <p>(bool)Boolean value for the sockets reuse address option (SO_REUSEADDR).
Default value is <code>true</code></p>
-      </attribute>
-      <attribute name="socket.soLingerOn" required="false">
-        <p>(bool)Boolean value for the sockets so linger option (SO_LINGER). Default
value is <code>true</code>.
-           This option is paired with the <code>soLingerTime</code> value.</p>
-      </attribute>
-      <attribute name="socket.soLingerTime" required="false">
-        <p>(bool)Value in seconds for the sockets so linger option (SO_LINGER). Default
value is <code>25</code> seconds.
-           This option is paired with the soLinger value.</p>
-      </attribute>
-      <attribute name="socket.soTimeout" required="false">
-        <p>(int)Value in milliseconds for the sockets read timeout (SO_TIMEOUT). Default
value is <code>5000</code> milliseconds.</p>
-      </attribute>      
-      <attribute name="socket.soTrafficClass" required="false">
-        <p>(byte)Value between <code>0</code> and <code>255</code>
for the traffic class on the socket, <code>0x04 | 0x08 | 0x010</code></p>
-      </attribute>      
-      <attribute name="socket.performanceConnectionTime" required="false">
-        <p>(int)The first value for the performance settings. Default is <code>1</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
-      </attribute>      
-      <attribute name="socket.performanceLatency" required="false">
-        <p>(int)The second value for the performance settings. Default is <code>0</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
-      </attribute>      
-      <attribute name="socket.performanceBandwidth" required="false">
-        <p>(int)The third value for the performance settings. Default is <code>1</code>,
see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket
Performance Options</a></p>
-      </attribute>      
       <attribute name="selectorPool.maxSelectors" required="false">
         <p>(int)The max selectors to be used in the pool, to reduce selector contention.
         Use this option when the command line <code>org.apache.tomcat.util.net.NioSelectorShared</code>
value is set to false.
@@ -738,10 +743,10 @@
     Classname         Http11Protocol                  Http11NioProtocol         Http11AprProtocol
     Tomcat Version   3.x 4.x 5.x 6.x                       6.x                     5.5.x
6.x
     Support Polling         NO                             YES                        YES
-    Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited
-    Read HTTP Request     Blocking                     Blocking                       Blocking
-    Read HTTP Body        Blocking                     Blocking                       Blocking
-    Write HTTP Response   Blocking                     Blocking                       Blocking
+    Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited
- Configurable
+    Read HTTP Request     Blocking                     Non Blocking                   Blocking
+    Read HTTP Body        Blocking                     Sim Blocking                   Blocking
+    Write HTTP Response   Blocking                     Sim Blocking                   Blocking
     SSL Support           Java SSL                     Java SSL                       OpenSSL
     SSL Handshake         Blocking                     Non blocking                   Blocking
     Max Connections       maxThreads                   See polling size               See
polling size



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


Mime
View raw message