(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.93.4.4 and 1.119

version 1.93.4.4, 2008/01/02 21:05:03 version 1.119, 2008/05/12 09:14:51
Line 44 
Line 44 
 #include "Tracer.h" #include "Tracer.h"
 #include <Pegasus/Common/MessageLoader.h> #include <Pegasus/Common/MessageLoader.h>
  
 #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM  #ifdef PEGASUS_OS_PASE
 #include "EBCDIC_OS400.h"  # include <as400_protos.h>
   # include <Pegasus/Common/PaseCcsid.h>
 #endif #endif
  
   
 PEGASUS_USING_STD; PEGASUS_USING_STD;
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
  
 static int MAX_CONNECTION_QUEUE_LENGTH = -1;  static int _maxConnectionQueueLength = -1;
  
 //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
 // //
Line 99 
Line 99 
  
     ~HTTPAcceptorRep()     ~HTTPAcceptorRep()
     {     {
           closeSocket();
         delete address;         delete address;
     }     }
   
       void closeSocket()
       {
           Socket::close(socket);
       }
   
     struct sockaddr* address;     struct sockaddr* address;
  
     SocketLength address_size;     SocketLength address_size;
Line 137 
Line 144 
    Socket::initializeInterface();    Socket::initializeInterface();
  
    /*    /*
         Platforms interpret the value of MAX_CONNECTION_QUEUE_LENGTH          Platforms interpret the value of _maxConnectionQueueLength
         differently.  Some platforms interpret the value literally, while         differently.  Some platforms interpret the value literally, while
         others multiply a fudge factor. When the server is under stress from         others multiply a fudge factor. When the server is under stress from
         multiple clients with multiple requests, toggling this number may         multiple clients with multiple requests, toggling this number may
Line 145 
Line 152 
         value, we allow an environment variable to be set which specifies a         value, we allow an environment variable to be set which specifies a
         number greater than the maximum concurrent client connections         number greater than the maximum concurrent client connections
         possible.  If this environment var is not specified, then         possible.  If this environment var is not specified, then
         MAX_CONNECTION_QUEUE_LENGTH = 15.          _maxConnectionQueueLength = 15.
    */    */
  
 //To engage runtime backlog queue length: uncomment the following block AND //To engage runtime backlog queue length: uncomment the following block AND
 //comment out the line MAX_CONNECTION_QUEUE_LENGTH = 15  //comment out the line _maxConnectionQueueLength = 15
  
 /* /*
     if (MAX_CONNECTION_QUEUE_LENGTH == -1)      if (_maxConnectionQueueLength == -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");         const char* env = getenv("PEGASUS_MAX_BACKLOG_CONNECTION_QUEUE");
 #endif  
         if (!env)         if (!env)
         {         {
             MAX_CONNECTION_QUEUE_LENGTH = 15;              _maxConnectionQueueLength = 15;
         }         }
         else         else
         {         {
             char* end = NULL;             char* end = NULL;
             MAX_CONNECTION_QUEUE_LENGTH = strtol(env, &end, 10);              _maxConnectionQueueLength = strtol(env, &end, 10);
             if (*end)             if (*end)
                 MAX_CONNECTION_QUEUE_LENGTH = 15;                  _maxConnectionQueueLength = 15;
             cout << " MAX_CONNECTION_QUEUE_LENGTH = " <<              cout << " _maxConnectionQueueLength = " <<
                 MAX_CONNECTION_QUEUE_LENGTH << endl;                  _maxConnectionQueueLength << endl;
         }         }
     }     }
 */ */
     MAX_CONNECTION_QUEUE_LENGTH = 15;  #ifdef PEGASUS_WMIMAPPER
       //The WMI Mapper can be used as a proxy to multiple WMI Servers.
       //If a client application simultaneously initiates connections
       //to many Windows systems, many of these connections may be routed
       //to a single WMI Mapper. A larger _maxConnectionQueueLength
       //value is required to allow these connections to be initiated
       //successfully.
       _maxConnectionQueueLength = 40;
   #else
       _maxConnectionQueueLength = 15;
   #endif
 } }
  
 HTTPAcceptor::~HTTPAcceptor() HTTPAcceptor::~HTTPAcceptor()
Line 201 
Line 211 
             SocketMessage* socketMessage = (SocketMessage*)message;             SocketMessage* socketMessage = (SocketMessage*)message;
  
             // If this is a connection request:             // If this is a connection request:
               PEGASUS_ASSERT(socketMessage->socket == _rep->socket);
   
               PEGASUS_ASSERT(socketMessage->events & SocketMessage::READ);
  
             if (socketMessage->socket == _rep->socket &&  
                 socketMessage->events & SocketMessage::READ)  
             {  
                 _acceptConnection();                 _acceptConnection();
             }  
             else  
             {  
                 // ATTN! this can't happen!  
                 PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                     "HTTPAcceptor::handleEnqueue: Invalid SOCKET_MESSAGE "  
                         "received.");  
            }  
  
            break;            break;
        }        }
Line 243 
Line 245 
        }        }
  
        default:        default:
            // ATTN: need unexpected message error!             PEGASUS_ASSERT(false);
            PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                "HTTPAcceptor::handleEnqueue: Invalid MESSAGE received.");  
            break;            break;
     }     }
  
Line 256 
Line 256 
 void HTTPAcceptor::handleEnqueue() void HTTPAcceptor::handleEnqueue()
 { {
     Message* message = dequeue();     Message* message = dequeue();
   
     if (!message)  
     {  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::handleEnqueue(): No message on queue.");  
         return;  
     }  
   
     handleEnqueue(message);     handleEnqueue(message);
 } }
  
Line 273 
Line 265 
     {     {
         MessageLoaderParms parms("Common.HTTPAcceptor.ALREADY_BOUND",         MessageLoaderParms parms("Common.HTTPAcceptor.ALREADY_BOUND",
             "HTTPAcceptor already bound");             "HTTPAcceptor already bound");
   
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::bind: HTTPAcceptor already bound.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 292 
Line 281 
 */ */
 void HTTPAcceptor::_bind() void HTTPAcceptor::_bind()
 { {
   #ifdef PEGASUS_OS_PASE
       // bind need ccsid is 819
       int orig_ccsid;
       orig_ccsid = _SETCCSID(-1);
       if (orig_ccsid == -1)
       {
           PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
               String("HTTPAcceptor::_bind: Can not get current PASE CCSID."));
           orig_ccsid = 1208;
       }
       PaseCcsid ccsid(819, orig_ccsid);
   #endif
   
     PEGASUS_ASSERT(_rep != 0);     PEGASUS_ASSERT(_rep != 0);
     // Create address:     // Create address:
     memset(_rep->address, 0, _rep->address_size);     memset(_rep->address, 0, _rep->address_size);
Line 299 
Line 301 
     if (_connectionType == LOCAL_CONNECTION)     if (_connectionType == LOCAL_CONNECTION)
     {     {
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
           //
           // Make sure the local domain socket can be owned by the cimserver
           // user.  Otherwise, the bind may fail with a vague "bind failed"
           // error.
           //
           if (System::exists(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH))
           {
               if (!System::removeFile(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH))
               {
                   throw CannotRemoveFile(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH);
               }
           }
   
         reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_family =         reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_family =
             AF_UNIX;             AF_UNIX;
         strcpy(reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path,         strcpy(reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path,
             PEGASUS_LOCAL_DOMAIN_SOCKET_PATH);             PEGASUS_LOCAL_DOMAIN_SOCKET_PATH);
 #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM  
         AtoE(reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path);  
 #endif  
         ::unlink(  
             reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path);  
 #else #else
         PEGASUS_ASSERT(false);         PEGASUS_ASSERT(false);
 #endif #endif
Line 364 
Line 374 
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_CREATE_SOCKET",         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_CREATE_SOCKET",
             "Failed to create socket");             "Failed to create socket");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind _rep->socket < 0");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 402 
Line 410 
     if (setsockopt(_rep->socket, SOL_SOCKET, SO_REUSEADDR,     if (setsockopt(_rep->socket, SOL_SOCKET, SO_REUSEADDR,
             (char *)&opt, sizeof(opt)) < 0)             (char *)&opt, sizeof(opt)) < 0)
     {     {
         Socket::close(_rep->socket);  
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_SET_SOCKET_OPTION",         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_SET_SOCKET_OPTION",
             "Failed to set socket option");             "Failed to set socket option");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to set socket option.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 418 
Line 423 
     //     //
     if (::bind(_rep->socket, _rep->address, _rep->address_size) < 0)     if (::bind(_rep->socket, _rep->address, _rep->address_size) < 0)
     {     {
         Socket::close(_rep->socket);          MessageLoaderParms parms(
               "Common.HTTPAcceptor.FAILED_BIND_SOCKET_DETAIL",
               "Failed to bind socket on port $0: $1.",
               _portNumber, PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS);
   
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
             "Failed to bind socket");  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to bind socket.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 450 
Line 455 
     //     //
 #if !defined(PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET) && \ #if !defined(PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET) && \
      (defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || \      (defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || \
       defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM))        defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || \
         defined(PEGASUS_OS_PASE))
     if (_connectionType == LOCAL_CONNECTION)     if (_connectionType == LOCAL_CONNECTION)
     {     {
         if (::chmod(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,         if (::chmod(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,
Line 458 
Line 464 
                 S_IRGRP | S_IWGRP | S_IXGRP |                 S_IRGRP | S_IWGRP | S_IXGRP |
                 S_IROTH | S_IWOTH | S_IXOTH ) < 0 )                 S_IROTH | S_IWOTH | S_IXOTH ) < 0 )
         {         {
             Socket::close(_rep->socket);              MessageLoaderParms parms(
                   "Common.HTTPAcceptor.FAILED_SET_LDS_FILE_OPTION",
                   "Failed to set permission on local domain socket {0}: {1}.",
                   PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,
                   PEGASUS_SYSTEM_ERRORMSG_NLS );
   
             delete _rep;             delete _rep;
             _rep = 0;             _rep = 0;
             MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
                 "Failed to bind socket");  
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                 "HTTPAcceptor::_bind: Failed to set domain socket "  
                     "permissions.");  
             throw BindFailedException(parms);             throw BindFailedException(parms);
         }         }
     }     }
Line 473 
Line 479 
  
     // Set up listening on the given socket:     // Set up listening on the given socket:
  
     //int const MAX_CONNECTION_QUEUE_LENGTH = 15;      //int const _maxConnectionQueueLength = 15;
  
     if (listen(_rep->socket, MAX_CONNECTION_QUEUE_LENGTH) < 0)      if (::listen(_rep->socket, _maxConnectionQueueLength) < 0)
     {     {
         Socket::close(_rep->socket);          MessageLoaderParms parms(
               "Common.HTTPAcceptor.FAILED_LISTEN_SOCKET",
               "Failed to listen on socket {0}: {1}.",
               (int)_rep->socket,PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS );
   
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
             "Failed to bind socket");  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to bind socket(1).");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 493 
Line 499 
             _rep->socket,             _rep->socket,
             SocketMessage::READ | SocketMessage::EXCEPTION,             SocketMessage::READ | SocketMessage::EXCEPTION,
             getQueueId(),             getQueueId(),
             Monitor::ACCEPTOR)))              MonitorEntry::TYPE_ACCEPTOR)))
     {     {
         Socket::close(_rep->socket);  
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms(         MessageLoaderParms parms(
             "Common.HTTPAcceptor.FAILED_SOLICIT_SOCKET_MESSAGES",             "Common.HTTPAcceptor.FAILED_SOLICIT_SOCKET_MESSAGES",
             "Failed to solicit socket messaeges");             "Failed to solicit socket messaeges");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to solicit socket messages(2).");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
 } }
Line 521 
Line 524 
         //_monitor->unsolicitSocketMessages(_rep->socket);         //_monitor->unsolicitSocketMessages(_rep->socket);
  
         // close the socket         // close the socket
         Socket::close(_rep->socket);          _rep->closeSocket();
         // Unlink Local Domain Socket Bug# 3312         // Unlink Local Domain Socket Bug# 3312
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
Line 538 
Line 541 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,
             "HTTPAcceptor::closeConnectionSocket failure _rep is null.");             "HTTPAcceptor::closeConnectionSocket failure _rep is null.");
     }     }
 } }
Line 570 
Line 573 
         // unregister the socket         // unregister the socket
         _monitor->unsolicitSocketMessages(_rep->socket);         _monitor->unsolicitSocketMessages(_rep->socket);
         // close the socket         // close the socket
         Socket::close(_rep->socket);          _rep->closeSocket();
         // Unlink Local Domain Socket Bug# 3312          // Unlink Local Domain Socket
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
Line 603 
Line 606 
     if (_rep)     if (_rep)
     {     {
         AutoMutex autoMut(_rep->_connection_mut);         AutoMutex autoMut(_rep->_connection_mut);
         if (_rep->connections.size() > 0)          for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)
         {         {
             HTTPConnection* connection = _rep->connections[0];              HTTPConnection* connection = _rep->connections[i];
             count = connection->getRequestCount();              if (connection->isResponsePending())
               {
                   count++;
               }
         }         }
     }     }
     return count;     return count;
Line 636 
Line 642 
     if (_rep)     if (_rep)
     {     {
         _portNumber = 0;         _portNumber = 0;
         Socket::close(_rep->socket);          _rep->closeSocket();
  
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
Line 653 
Line 659 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,
             "HTTPAcceptor::unbind failure _rep is null." );             "HTTPAcceptor::unbind failure _rep is null." );
     }     }
 } }
Line 746 
Line 752 
  
             return;             return;
         }         }
           // TBD-7646
           PEG_TRACE((
               TRC_DISCARDED_DATA,
               Tracer::LEVEL2,
               "HTTPAcceptor: accept() failed.  errno: %u",
               errno));
           return;
       }
  
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,      // Use an AutoPtr to ensure the socket handle is closed on exception
             "HTTPAcceptor - accept() failure.  errno: $0", errno);      AutoPtr<SocketHandle, CloseSocketHandle> socketPtr(&socket);
   
   #ifndef PEGASUS_OS_TYPE_WINDOWS
       // We need to ensure that the socket number is not higher than
       // what fits into FD_SETSIZE, because we else won't be able to select on it
       // and won't ever communicate correct on that socket.
       if (socket >= FD_SETSIZE)
       {
           // the remote connection is invalid, destroy client address.
           delete accept_address;
   
           // TBD-7646
           PEG_TRACE(
               (TRC_DISCARDED_DATA,
                Tracer::LEVEL2,
                "HTTPAcceptor out of available sockets."
                    "accept() returned too large socket number %u."
                    "Closing connection to the new client.",
                socket));
  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor: accept() failed");  
         return;         return;
     }     }
   #endif
  
     String ipAddress;     String ipAddress;
  
Line 766 
Line 797 
 #ifdef PEGASUS_ENABLE_IPV6 #ifdef PEGASUS_ENABLE_IPV6
         char ipBuffer[PEGASUS_INET6_ADDRSTR_LEN];         char ipBuffer[PEGASUS_INET6_ADDRSTR_LEN];
         int rc;         int rc;
         while ((rc = getnameinfo(accept_address, address_size, ipBuffer,          if ((rc = System::getNameInfo(accept_address,
             PEGASUS_INET6_ADDRSTR_LEN, 0, 0, NI_NUMERICHOST)) == EAI_AGAIN)                  address_size,
             ;                  ipBuffer,
         if (rc)                  PEGASUS_INET6_ADDRSTR_LEN,
         {                  0,
             Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,                  0,
                 "HTTPAcceptor - getnameinfo() failure.  rc: $0", rc);                  NI_NUMERICHOST)))
           {
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,              // TBD-7646
                 "HTTPAcceptor: getnameinfo() failed");              PEG_TRACE((
                   TRC_DISCARDED_DATA,
                   Tracer::LEVEL2,
                   "HTTPAcceptor: getnameinfo() failed.  rc: %d",
                   rc));
             delete accept_address;             delete accept_address;
             Socket::close(socket);  
             return;             return;
         }         }
         ipAddress = ipBuffer;         ipAddress = ipBuffer;
Line 816 
Line 850 
     PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 0,     PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 0,
         "HTTPAcceptor - accept() success.  Socket: $1" ,socket));         "HTTPAcceptor - accept() success.  Socket: $1" ,socket));
  
     AutoPtr<MP_Socket> mp_socket(new MP_Socket(      SharedPtr<MP_Socket> mp_socket(new MP_Socket(
         socket, _sslcontext, _sslContextObjectLock));          socket, _sslcontext, _sslContextObjectLock, ipAddress));
       // mp_socket now has responsibility for closing the socket handle
       socketPtr.release();
  
     mp_socket->disableBlocking();     mp_socket->disableBlocking();
     mp_socket->setSocketWriteTimeout(_socketWriteTimeout);     mp_socket->setSocketWriteTimeout(_socketWriteTimeout);
Line 830 
Line 866 
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
             "HTTPAcceptor: SSL_accept() failed");             "HTTPAcceptor: SSL_accept() failed");
         mp_socket->close();  
         return;         return;
     }     }
  
     // Create a new connection and add it to the connection list:     // Create a new connection and add it to the connection list:
  
     HTTPConnection* connection = new HTTPConnection(_monitor, mp_socket,      AutoPtr<HTTPConnection> connection(new HTTPConnection(
         ipAddress, this, static_cast<MessageQueue *>(_outputMessageQueue));          _monitor,
           mp_socket,
           ipAddress,
           this,
           static_cast<MessageQueue *>(_outputMessageQueue)));
  
     if (_idleConnectionTimeoutSeconds)     if (_idleConnectionTimeoutSeconds)
     {     {
Line 860 
Line 899 
     if (-1 ==  (index = _monitor->solicitSocketMessages(     if (-1 ==  (index = _monitor->solicitSocketMessages(
             connection->getSocket(),             connection->getSocket(),
             SocketMessage::READ | SocketMessage::EXCEPTION,             SocketMessage::READ | SocketMessage::EXCEPTION,
             connection->getQueueId(), Monitor::CONNECTION)) )              connection->getQueueId(), MonitorEntry::TYPE_CONNECTION)) )
     {     {
         // ATTN-DE-P2-2003100503::TODO::Need to enhance code to return  
         // an error message to Client application.  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
             "HTTPAcceptor::_acceptConnection: Attempt to allocate entry in "             "HTTPAcceptor::_acceptConnection: Attempt to allocate entry in "
                 "_entries table failed.");                 "_entries table failed.");
         delete connection;  
         Socket::close(socket);  
         return;         return;
     }     }
  
     // Save the socket for cleanup later:  
     connection->_entry_index = index;     connection->_entry_index = index;
     AutoMutex autoMut(_rep->_connection_mut);     AutoMutex autoMut(_rep->_connection_mut);
     _rep->connections.append(connection);      _rep->connections.append(connection.get());
       connection.release();
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.93.4.4  
changed lines
  Added in v.1.119

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2