Index: /trunk/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
===================================================================
--- /trunk/src/VBox/Installer/solaris/smf-vboxwebsrv.sh	(revision 31170)
+++ /trunk/src/VBox/Installer/solaris/smf-vboxwebsrv.sh	(revision 31171)
@@ -2,5 +2,5 @@
 # $Id$
 
-# Copyright (C) 2008 Oracle Corporation
+# Copyright (C) 2008-2010 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -46,4 +46,6 @@
         VW_CHECK_INTERVAL=`/usr/bin/svcprop -p config/checkinterval $SMF_FMRI 2>/dev/null`
         [ $? != 0 ] && VW_CHECK_INTERVAL=
+        VW_KEEPALIVE=`/usr/bin/svcprop -p config/keepalive $SMF_FMRI 2>/dev/null`
+        [ $? != 0 ] && VW_KEEPALIVE=
 
         # Provide sensible defaults
@@ -53,5 +55,6 @@
         [ -z "$VW_TIMEOUT" ] && VW_TIMEOUT=20
         [ -z "$VW_CHECK_INTERVAL" ] && VW_CHECK_INTERVAL=5
-        exec su - "$VW_USER" -c "/opt/VirtualBox/vboxwebsrv --host \"$VW_HOST\" --port \"$VW_PORT\" --timeout \"$VW_TIMEOUT\" --check-interval \"$VW_CHECK_INTERVAL\""
+        [ -z "$VW_KEEPALIVE" ] && VW_KEEPALIVE=1000
+        exec su - "$VW_USER" -c "/opt/VirtualBox/vboxwebsrv --host \"$VW_HOST\" --port \"$VW_PORT\" --timeout \"$VW_TIMEOUT\" --check-interval \"$VW_CHECK_INTERVAL\" --keepalive \"$VW_KEEPALIVE\""
 
         VW_EXIT=$?
Index: /trunk/src/VBox/Main/webservice/vboxweb.cpp
===================================================================
--- /trunk/src/VBox/Main/webservice/vboxweb.cpp	(revision 31170)
+++ /trunk/src/VBox/Main/webservice/vboxweb.cpp	(revision 31171)
@@ -101,4 +101,5 @@
 unsigned int            g_uBacklog = 100;               // backlog = max queue size for requests
 unsigned int            g_cMaxWorkerThreads = 100;      // max. no. of worker threads
+unsigned int            g_cMaxKeepAlive = 100;          // maximum number of soap requests in one connection
 
 bool                    g_fVerbose = false;             // be verbose
@@ -158,4 +159,5 @@
         { "--check-interval",   'i', RTGETOPT_REQ_UINT32 },
         { "--threads",          'T', RTGETOPT_REQ_UINT32 },
+        { "--keepalive",        'k', RTGETOPT_REQ_UINT32 },
         { "--verbose",          'v', RTGETOPT_REQ_NOTHING },
         { "--logfile",          'F', RTGETOPT_REQ_STRING },
@@ -254,5 +256,5 @@
         soap_set_omode(m_soap, SOAP_IO_KEEPALIVE);
         soap_set_imode(m_soap, SOAP_IO_KEEPALIVE);
-        m_soap->max_keep_alive = 100;
+        m_soap->max_keep_alive = g_cMaxKeepAlive;
 
         if (!RT_SUCCESS(RTThreadCreate(&m_pThread,
@@ -662,4 +664,8 @@
             case 'T':
                 g_cMaxWorkerThreads = ValueUnion.u32;
+            break;
+
+            case 'k':
+                g_cMaxKeepAlive = ValueUnion.u32;
             break;
 
