Abstract Acceptor class used for pluggable transports. More...
#include <Transport_Acceptor.h>
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_ |
Abstract Acceptor class used for pluggable transports.
Base class for the Acceptor bridge class.
Definition at line 77 of file Transport_Acceptor.h.
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
}
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_; }
time_t TAO_Acceptor::error_retry_delay_ [private] |
Definition at line 163 of file Transport_Acceptor.h.
CORBA::ULong const TAO_Acceptor::tag_ [private] |
IOP protocol tag.
Definition at line 161 of file Transport_Acceptor.h.