Public Member Functions | Private Attributes

TAO_Acceptor Class Reference

Abstract Acceptor class used for pluggable transports. More...

#include <Transport_Acceptor.h>

Inheritance diagram for TAO_Acceptor:
Inheritance graph
[legend]

List of all members.

Public Member Functions

 TAO_Acceptor (CORBA::ULong tag)
virtual ~TAO_Acceptor (void)
 Destructor.
CORBA::ULong tag (void) const
 The tag, each concrete class will have a specific tag value.
void set_error_retry_delay (time_t delay)
virtual int open (TAO_ORB_Core *orb_core, ACE_Reactor *reactor, int version_major, int version_minor, const char *address, const char *options=0)=0
 Method to initialize acceptor for address.
virtual int open_default (TAO_ORB_Core *, ACE_Reactor *reactor, int version_major, int version_minor, const char *options=0)=0
virtual int close (void)=0
 Closes the acceptor.
virtual int create_profile (const TAO::ObjectKey &object_key, TAO_MProfile &mprofile, CORBA::Short priority)=0
virtual int is_collocated (const TAO_Endpoint *endpoint)=0
 Return 1 if the endpoint has the same address as the acceptor.
virtual CORBA::ULong endpoint_count (void)=0
virtual int object_key (IOP::TaggedProfile &profile, TAO::ObjectKey &key)=0
int handle_accept_error (ACE_Event_Handler *base_acceptor)
int handle_expiration (ACE_Event_Handler *base_acceptor)

Private Attributes

CORBA::ULong const tag_
 IOP protocol tag.
time_t error_retry_delay_

Detailed Description

Abstract Acceptor class used for pluggable transports.

Base class for the Acceptor bridge class.

Todo:
Need to rename the class as TAO_Transport_Acceptor.

Definition at line 77 of file Transport_Acceptor.h.


Constructor & Destructor Documentation

TAO_Acceptor::TAO_Acceptor ( CORBA::ULong  tag  ) 

Definition at line 18 of file Transport_Acceptor.cpp.

  : tag_ (tag),
    error_retry_delay_ (5)
{
}

TAO_Acceptor::~TAO_Acceptor ( void   )  [virtual]

Destructor.

Definition at line 24 of file Transport_Acceptor.cpp.

{

  //@@ TAO_ACCEPTOR_DESTRUCTOR_ADD_HOOK
}


Member Function Documentation

virtual int TAO_Acceptor::close ( void   )  [pure virtual]

Closes the acceptor.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

virtual int TAO_Acceptor::create_profile ( const TAO::ObjectKey &  object_key,
TAO_MProfile mprofile,
CORBA::Short  priority 
) [pure virtual]

Create the corresponding profile for this endpoint. If share_profile is set to true, the pluggable protocol implementation should try to add the endpoint to a profile in the mprofile that is of the same type. Currently, this is used when RT CORBA is enabled.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

virtual CORBA::ULong TAO_Acceptor::endpoint_count ( void   )  [pure virtual]

Returns the number of endpoints this acceptor is listening on. This is used for determining how many profiles will be generated for this acceptor.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

int TAO_Acceptor::handle_accept_error ( ACE_Event_Handler base_acceptor  ) 

This method is not directly associated with the method of the same name on the ACE_Acceptor template class. However, it is called by the TAO_Strategy_Acceptor method of the same name.

Definition at line 31 of file Transport_Acceptor.cpp.

{
  if (errno == EMFILE || errno == ENFILE)
    {
      if (TAO_debug_level > 0)
        ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - "
                              "TAO_Acceptor::handle_accept_error - "
                              "Too many files open\n"));

      // If the user has decided to stop accepting when the file handles
      // run out, just return -1;
      if (this->error_retry_delay_ == 0)
        return -1;

      // Get the reactor.  If there isn't one, which isn't very likely,
      // then just return -1.
      ACE_Reactor* reactor = base_acceptor->reactor ();
      if (reactor == 0)
        return -1;

      // So that the reactor doesn't completely remove this handler from
      // the reactor, register it with the except mask.  It should be
      // removed in the timer handler.
      reactor->register_handler (base_acceptor,
                                 ACE_Event_Handler::EXCEPT_MASK);

      // Remove the handler so that the reactor doesn't attempt to
      // process this handle again (and tightly spin).
      reactor->remove_handler (base_acceptor,
                               ACE_Event_Handler::ACCEPT_MASK |
                               ACE_Event_Handler::DONT_CALL);

      // Schedule a timer so that we can resume the handler in hopes
      // that some file handles have freed up.
      ACE_Time_Value timeout (this->error_retry_delay_);
      reactor->schedule_timer (base_acceptor, 0, timeout);
    }

  // We want to keep accepting in all other situations.
  return 0;
}

int TAO_Acceptor::handle_expiration ( ACE_Event_Handler base_acceptor  ) 

Perform the handle_timeout functionality to put this acceptor back into the reactor to try accepting again.

Definition at line 74 of file Transport_Acceptor.cpp.

{
  // Get the reactor.  If there isn't one, which isn't very likely, then
  // just return -1;
  ACE_Reactor* reactor = base_acceptor->reactor ();
  if (reactor == 0)
    return -1;

  if (TAO_debug_level > 0)
    ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - "
                          "TAO_Acceptor::handle_expiration - "
                          "Re-registering the acceptor\n"));

  // Try again to allow incoming connections
  reactor->register_handler (base_acceptor, ACE_Event_Handler::ACCEPT_MASK);

  // Remove the except mask that was added during the handling of the
  // accept() error.  That is the only reason that we're in this method
  // in the first place.
  reactor->remove_handler (base_acceptor, ACE_Event_Handler::EXCEPT_MASK |
                                          ACE_Event_Handler::DONT_CALL);
  return 0;
}

virtual int TAO_Acceptor::is_collocated ( const TAO_Endpoint endpoint  )  [pure virtual]

Return 1 if the endpoint has the same address as the acceptor.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

virtual int TAO_Acceptor::object_key ( IOP::TaggedProfile &  profile,
TAO::ObjectKey &  key 
) [pure virtual]

This method fetches the key from the profile. Protocols that are pluggable can send data that are specific in the profile_data field encapsulated as a octet stream. This method allows those protocols to get the object key from the encapsulation.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

virtual int TAO_Acceptor::open ( TAO_ORB_Core orb_core,
ACE_Reactor reactor,
int  version_major,
int  version_minor,
const char *  address,
const char *  options = 0 
) [pure virtual]

Method to initialize acceptor for address.

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

virtual int TAO_Acceptor::open_default ( TAO_ORB_Core ,
ACE_Reactor reactor,
int  version_major,
int  version_minor,
const char *  options = 0 
) [pure virtual]

Open an acceptor with the given protocol version on a default endpoint

Implemented in TAO_IIOP_Acceptor, TAO_DIOP_Acceptor, and TAO_UIOP_Acceptor.

void TAO_Acceptor::set_error_retry_delay ( time_t  delay  ) 

Set the amount of time to delay accepting new connections in the event that we encounter an error that may be transient.

Definition at line 14 of file Transport_Acceptor.inl.

{
  this->error_retry_delay_ = delay;
}

CORBA::ULong TAO_Acceptor::tag ( void   )  const

The tag, each concrete class will have a specific tag value.

Definition at line 8 of file Transport_Acceptor.inl.

{
  return this->tag_;
}


Member Data Documentation

Definition at line 163 of file Transport_Acceptor.h.

IOP protocol tag.

Definition at line 161 of file Transport_Acceptor.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines