(file) Return to HTTPAcceptor.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/HTTPAcceptor.cpp between version 1.45.2.1 and 1.51

version 1.45.2.1, 2004/01/16 16:57:31 version 1.51, 2004/08/16 10:55:53
Line 30 
Line 30 
 //         Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com) //         Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
 //         Dave Rosckes (rosckes@us.ibm.com) //         Dave Rosckes (rosckes@us.ibm.com)
 //         Denise Eckstein (denise.eckstein@hp.com) //         Denise Eckstein (denise.eckstein@hp.com)
   //         Alagaraja Ramasubramanian (alags_raj@in.ibm.com) for Bug#1090
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 70 
Line 71 
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
   static int MAX_CONNECTION_QUEUE_LENGTH = -1;
   
   
 //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
 // //
 // HTTPAcceptorRep // HTTPAcceptorRep
Line 122 
Line 126 
                            MessageQueue* outputMessageQueue,                            MessageQueue* outputMessageQueue,
                            Boolean localConnection,                            Boolean localConnection,
                            Uint32 portNumber,                            Uint32 portNumber,
                            SSLContext * sslcontext)                             SSLContext * sslcontext,
                              Boolean exportConnection)
    : Base(PEGASUS_QUEUENAME_HTTPACCEPTOR),  // ATTN: Need unique names?    : Base(PEGASUS_QUEUENAME_HTTPACCEPTOR),  // ATTN: Need unique names?
      _monitor(monitor),      _monitor(monitor),
      _outputMessageQueue(outputMessageQueue),      _outputMessageQueue(outputMessageQueue),
Line 130 
Line 135 
      _entry_index(-1),      _entry_index(-1),
      _localConnection(localConnection),      _localConnection(localConnection),
      _portNumber(portNumber),      _portNumber(portNumber),
      _sslcontext(sslcontext)       _sslcontext(sslcontext),
        _exportConnection(exportConnection)
 { {
    Socket::initializeInterface();    Socket::initializeInterface();
   
      /*
           Platforms interpret the value of MAX_CONNECTION_QUEUE_LENGTH differently.  Some platforms interpret
           the value literally, while others multiply a fudge factor. When the server is under
           stress from multiple clients with multiple requests, toggling this number may prevent clients from
           being dropped.  Instead of hard coding the value, we allow an environment variable to be set which
           specifies a number greater than the maximum concurrent client connections possible.  If this environment
           var is not specified, then MAX_CONNECTION_QUEUE_LENGTH = 15.
      */
   
   //To engage runtime backlog queue length: uncomment the following block AND comment out the line MAX_CONNECTION_QUEUE_LENGTH = 15
   
   /*
      if(MAX_CONNECTION_QUEUE_LENGTH == -1){
   #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM
   #pragma convert(37)
           const char* env = getenv("PEGASUS_MAX_BACKLOG_CONNECTION_QUEUE");
           EtoA(env);
   #pragma convert(0)
   #else
           const char* env = getenv("PEGASUS_MAX_BACKLOG_CONNECTION_QUEUE");
   #endif
           if(!env){
                   MAX_CONNECTION_QUEUE_LENGTH = 15;
           }else{
                   char *end = NULL;
                   MAX_CONNECTION_QUEUE_LENGTH = strtol(env, &end, 10);
                   if(*end)
                           MAX_CONNECTION_QUEUE_LENGTH = 15;
                   cout << " MAX_CONNECTION_QUEUE_LENGTH = " << MAX_CONNECTION_QUEUE_LENGTH << endl;
           }
      }
   */
      MAX_CONNECTION_QUEUE_LENGTH = 15;
   
 } }
  
 HTTPAcceptor::~HTTPAcceptor() HTTPAcceptor::~HTTPAcceptor()
Line 175 
Line 216 
          CloseConnectionMessage* closeConnectionMessage          CloseConnectionMessage* closeConnectionMessage
             = (CloseConnectionMessage*)message;             = (CloseConnectionMessage*)message;
  
          _rep->_connection_mut.lock(pegasus_thread_self());           AutoMutex autoMut(_rep->_connection_mut);
  
          for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)          for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)
          {          {
Line 190 
Line 231 
                break;                break;
             }             }
          }          }
          _rep->_connection_mut.unlock();  
          break;          break;
       }       }
  
Line 365 
Line 406 
  
    // Set up listening on the given socket:    // Set up listening on the given socket:
  
    int const MAX_CONNECTION_QUEUE_LENGTH = 15;     //int const MAX_CONNECTION_QUEUE_LENGTH = 15;
  
    if (listen(_rep->socket, MAX_CONNECTION_QUEUE_LENGTH) < 0)    if (listen(_rep->socket, MAX_CONNECTION_QUEUE_LENGTH) < 0)
    {    {
Line 448 
Line 489 
 { {
    Uint32 count = 0;    Uint32 count = 0;
  
    _rep->_connection_mut.lock(pegasus_thread_self());     AutoMutex autoMut(_rep->_connection_mut);
    if (_rep->connections.size() > 0)    if (_rep->connections.size() > 0)
    {    {
       HTTPConnection* connection = _rep->connections[0];       HTTPConnection* connection = _rep->connections[0];
       count = connection->getRequestCount();       count = connection->getRequestCount();
    }    }
    _rep->_connection_mut.unlock();  
    return count;    return count;
 } }
  
Line 490 
Line 531 
  
    // For each connection created by this object:    // For each connection created by this object:
  
    _rep->_connection_mut.lock(pegasus_thread_self());     AutoMutex autoMut(_rep->_connection_mut);
    for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)    for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)
    {    {
       HTTPConnection* connection = _rep->connections[i];       HTTPConnection* connection = _rep->connections[i];
Line 507 
Line 548 
    }    }
  
    _rep->connections.clear();    _rep->connections.clear();
    _rep->_connection_mut.unlock();  
 } }
  
 void HTTPAcceptor::_acceptConnection() void HTTPAcceptor::_acceptConnection()
Line 587 
Line 628 
  
    // Create a new conection and add it to the connection list:    // Create a new conection and add it to the connection list:
  
    MP_Socket * mp_socket = new MP_Socket(socket, _sslcontext);     AutoPtr<MP_Socket> mp_socket(new MP_Socket(socket, _sslcontext, _exportConnection));
    if (mp_socket->accept() < 0)    if (mp_socket->accept() < 0)
    {    {
        PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,        PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
Line 595 
Line 636 
       return;       return;
    }    }
  
    HTTPConnection* connection = new HTTPConnection(     HTTPConnection* connection = new HTTPConnection(_monitor, mp_socket,
       _monitor, mp_socket, this, static_cast<MessageQueue *>(_outputMessageQueue));         this, static_cast<MessageQueue *>(_outputMessageQueue), _exportConnection);
  
    // Solicit events on this new connection's socket:    // Solicit events on this new connection's socket:
    int index;    int index;
Line 615 
Line 656 
       return;       return;
    }    }
  
      mp_socket.release();
   
    // Save the socket for cleanup later:    // Save the socket for cleanup later:
    connection->_entry_index = index;    connection->_entry_index = index;
    _rep->_connection_mut.lock(pegasus_thread_self());     AutoMutex autoMut(_rep->_connection_mut);
    _rep->connections.append(connection);    _rep->connections.append(connection);
    _rep->_connection_mut.unlock();  
 } }
  
 AsyncDQueue<pegasus_acceptor> pegasus_acceptor::acceptors(true, 0); AsyncDQueue<pegasus_acceptor> pegasus_acceptor::acceptors(true, 0);
Line 719 
Line 762 
   else if( _sslcontext != 0 ) {   else if( _sslcontext != 0 ) {
 #ifdef PEGASUS_HAS_SSL #ifdef PEGASUS_HAS_SSL
     ssl_socket_factory sf;     ssl_socket_factory sf;
       pegasus_socket temp(&sf, _sslcontext);
 #else #else
     bsd_socket_factory sf;     bsd_socket_factory sf;
       pegasus_socket temp(&sf);
 #endif #endif
     pegasus_socket temp(&sf, _sslcontext);  
     _listener = temp;     _listener = temp;
     _listener.socket(PF_INET, SOCK_STREAM, 0);     _listener.socket(PF_INET, SOCK_STREAM, 0);
   }   }


Legend:
Removed from v.1.45.2.1  
changed lines
  Added in v.1.51

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2