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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to