00001
00002
00003 #include "tao/Transport_Acceptor.h"
00004 #include "ace/Reactor.h"
00005 #include "tao/debug.h"
00006
00007 #if !defined (__ACE_INLINE__)
00008 # include "tao/Transport_Acceptor.inl"
00009 #endif
00010
00011 ACE_RCSID (tao,
00012 Acceptor,
00013 "$Id: Transport_Acceptor.cpp 81470 2008-04-28 12:40:23Z elliott_c $")
00014
00015
00016 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00017
00018 TAO_Acceptor::TAO_Acceptor (CORBA::ULong tag)
00019 : tag_ (tag),
00020 error_retry_delay_ (5)
00021 {
00022 }
00023
00024 TAO_Acceptor::~TAO_Acceptor (void)
00025 {
00026
00027
00028 }
00029
00030 int
00031 TAO_Acceptor::handle_accept_error (ACE_Event_Handler* base_acceptor)
00032 {
00033 if (errno == EMFILE || errno == ENFILE)
00034 {
00035 if (TAO_debug_level > 0)
00036 ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - "
00037 "TAO_Acceptor::handle_accept_error - "
00038 "Too many files open\n"));
00039
00040
00041
00042 if (this->error_retry_delay_ == 0)
00043 return -1;
00044
00045
00046
00047 ACE_Reactor* reactor = base_acceptor->reactor ();
00048 if (reactor == 0)
00049 return -1;
00050
00051
00052
00053
00054 reactor->register_handler (base_acceptor,
00055 ACE_Event_Handler::EXCEPT_MASK);
00056
00057
00058
00059 reactor->remove_handler (base_acceptor,
00060 ACE_Event_Handler::ACCEPT_MASK |
00061 ACE_Event_Handler::DONT_CALL);
00062
00063
00064
00065 ACE_Time_Value timeout (this->error_retry_delay_);
00066 reactor->schedule_timer (base_acceptor, 0, timeout);
00067 }
00068
00069
00070 return 0;
00071 }
00072
00073 int
00074 TAO_Acceptor::handle_expiration (ACE_Event_Handler* base_acceptor)
00075 {
00076
00077
00078 ACE_Reactor* reactor = base_acceptor->reactor ();
00079 if (reactor == 0)
00080 return -1;
00081
00082 if (TAO_debug_level > 0)
00083 ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - "
00084 "TAO_Acceptor::handle_expiration - "
00085 "Re-registering the acceptor\n"));
00086
00087
00088 reactor->register_handler (base_acceptor, ACE_Event_Handler::ACCEPT_MASK);
00089
00090
00091
00092
00093 reactor->remove_handler (base_acceptor, ACE_Event_Handler::EXCEPT_MASK |
00094 ACE_Event_Handler::DONT_CALL);
00095 return 0;
00096 }
00097
00098
00099
00100 TAO_END_VERSIONED_NAMESPACE_DECL