#include <Connection_Handler.h>
Inheritance diagram for TAO_Connection_Handler:
Public Member Functions | |
TAO_Connection_Handler (void) | |
Constructor. | |
TAO_Connection_Handler (TAO_ORB_Core *orb_core) | |
Constructor. | |
virtual | ~TAO_Connection_Handler (void) |
Destructor. | |
TAO_Transport * | transport (void) |
Return the underlying transport object. | |
void | transport (TAO_Transport *transport) |
Set the underlying transport object. | |
bool | is_closed (void) const |
Is the handler closed or timed out? | |
bool | is_open (void) const |
Is the handler open? | |
bool | is_timeout (void) const |
Closed due to timeout? | |
bool | is_connecting (void) const |
Is the handler in the process of being connected? | |
virtual int | close_connection (void)=0 |
Close the underlying connection. | |
virtual int | handle_input (ACE_HANDLE fd)=0 |
int | svc_i (void) |
virtual int | open_handler (void *)=0 |
A open () hook. | |
virtual int | close_handler (void) |
void | connection_pending (void) |
void | cancel_pending_connection (void) |
virtual int | set_dscp_codepoint (CORBA::Boolean set_network_priority) |
virtual int | set_dscp_codepoint (CORBA::Long dscp_codepoint) |
virtual int | release_os_resources (void) |
Release the OS resources related to this handler. | |
Protected Member Functions | |
TAO_ORB_Core * | orb_core (void) |
Return our TAO_ORB_Core pointer. | |
int | shared_open (void) |
int | set_socket_option (ACE_SOCK &sock, int snd_size, int rcv_size) |
Set options on the socket. | |
Helper methods for Event_Handler-based derived classes. | |
Many (actually all so far) implementations of TAO_Connection_Handler are a mixin of TAO_Connection_Handler and some form of ACE_Event_Handler. The following methods simplify such implementations by capturing the common code in a single place. | |
int | handle_output_eh (ACE_HANDLE h, ACE_Event_Handler *eh) |
Implement the handle_output() callback. | |
int | handle_input_eh (ACE_HANDLE h, ACE_Event_Handler *eh) |
Implement the handle_input() callback. | |
int | handle_input_internal (ACE_HANDLE h, ACE_Event_Handler *eh) |
Implement the handle_output() callback. | |
int | close_connection_eh (ACE_Event_Handler *eh) |
virtual void | pre_io_hook (int &return_value) |
virtual void | pos_io_hook (int &return_value) |
Private Attributes | |
TAO_ORB_Core *const | orb_core_ |
Pointer to the TAO_ORB_Core. | |
TAO_Transport * | transport_ |
Transport object reference. | |
ACE_Lock * | lock_ |
bool | connection_pending_ |
Stores the connection pending state. |
This class is an abstraction for the connection handlers. The connections handler in every protocol can derive from this class as well as the ACE_Svc_Handler specialised for the right protocol. This way, most of the common code for the different protocols would be in this implementation.
Definition at line 56 of file Connection_Handler.h.
TAO_Connection_Handler::TAO_Connection_Handler | ( | void | ) |
Constructor.
TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_Connection_Handler::TAO_Connection_Handler | ( | TAO_ORB_Core * | orb_core | ) |
Constructor.
Definition at line 26 of file Connection_Handler.cpp.
References TAO_LF_Event::LFS_CONNECTION_WAIT.
00027 : orb_core_ (orb_core), 00028 transport_ (0), 00029 connection_pending_ (false) 00030 { 00031 // @todo: We need to have a distinct option/ method in the resource 00032 // factory for this and TAO_Transport. 00033 this->lock_ = 00034 this->orb_core_->resource_factory ()->create_cached_connection_lock (); 00035 00036 // Put ourselves in the connection wait state as soon as we get 00037 // created 00038 this->state_changed (TAO_LF_Event::LFS_CONNECTION_WAIT, 00039 this->orb_core_->leader_follower ()); 00040 }
TAO_Connection_Handler::~TAO_Connection_Handler | ( | void | ) | [virtual] |
Destructor.
Definition at line 42 of file Connection_Handler.cpp.
References lock_.
00043 { 00044 // @@ TODO Use auto_ptr<> 00045 delete this->lock_; 00046 00047 //@@ CONNECTION_HANDLER_DESTRUCTOR_ADD_HOOK 00048 }
ACE_INLINE void TAO_Connection_Handler::cancel_pending_connection | ( | void | ) |
A pending connection may be canceled due to an error detected while the initiating thread is still in the Connector.
Definition at line 58 of file Connection_Handler.inl.
References connection_pending_, TAO_Transport::remove_reference(), and transport().
Referenced by TAO_IIOP_Connector::complete_connection(), and shared_open().
00059 { 00060 if (this->connection_pending_) 00061 { 00062 this->connection_pending_ = false; 00063 this->transport()->remove_reference(); 00064 } 00065 }
virtual int TAO_Connection_Handler::close_connection | ( | void | ) | [pure virtual] |
Close the underlying connection.
Used by the ORB to actively close connections that are idle, stale or somehow are determined to be broken before the Reactor does.
Implemented in TAO_IIOP_Connection_Handler.
Referenced by TAO_Transport::close_connection(), handle_input_eh(), and TAO_Thread_Per_Connection_Handler::~TAO_Thread_Per_Connection_Handler().
int TAO_Connection_Handler::close_connection_eh | ( | ACE_Event_Handler * | eh | ) | [protected] |
Implement close_connection() for Connection_Handlers that are also Event_Handlers.
Definition at line 296 of file Connection_Handler.cpp.
References ACE_ASSERT, ACE_DEBUG, ACE_Event_Handler::ALL_EVENTS_MASK, ACE_Event_Handler::DONT_CALL, ACE_Event_Handler::get_handle(), TAO_Transport::id(), TAO_Wait_Strategy::is_registered(), TAO_LF_Event::LFS_CONNECTION_CLOSED, LM_DEBUG, TAO_Transport::orb_core(), TAO_Transport::pre_close(), TAO_ORB_Core::reactor(), ACE_Event_Handler::reactor(), TAO_Transport::send_connection_closed_notifications(), TAO_LF_Event::state_changed(), TAO_debug_level, transport(), and TAO_Transport::wait_strategy().
Referenced by TAO_IIOP_Connection_Handler::close_connection().
00297 { 00298 // Save the ID for debugging messages 00299 ACE_HANDLE handle = eh->get_handle (); 00300 00301 size_t const id = this->transport ()->id (); 00302 if (TAO_debug_level) 00303 { 00304 ACE_DEBUG ((LM_DEBUG, 00305 "TAO (%P|%t) - Connection_Handler[%d]::" 00306 "close_connection_eh, purging entry from cache\n", 00307 handle)); 00308 } 00309 00310 this->transport ()->pre_close (); 00311 00312 // @@ This seems silly, but if we have no reason to be in the 00313 // reactor, then we dont remove ourselves. 00314 if (this->transport ()->wait_strategy ()->is_registered ()) 00315 { 00316 ACE_Reactor *eh_reactor = eh->reactor (); 00317 00318 if (this->orb_core_->has_shutdown () == 0) 00319 { 00320 // If the ORB is nil, get the reactor from orb_core which gets it 00321 // from LF. 00322 if (eh_reactor == 0) 00323 eh_reactor = this->transport()->orb_core()->reactor (); 00324 } 00325 00326 // The Reactor must not be null, otherwise something else is 00327 // horribly broken. 00328 ACE_ASSERT (eh_reactor != 0); 00329 00330 if (TAO_debug_level) 00331 { 00332 ACE_DEBUG ((LM_DEBUG, 00333 "TAO (%P|%t) - Connection_Handler[%d]::" 00334 "close_connection_eh, removing from the reactor\n", 00335 handle)); 00336 } 00337 00338 // Use id instead of handle. Why? "handle" may be invalid for RW 00339 // cases when drop_reply_on_shutdown is on, and when the 00340 // orb_core is shutting down. This means that the handler will 00341 // be left behind in the reactor which would create problems 00342 // later. Just forcefully remove them. If none exists reactor 00343 // will make things safer. 00344 ACE_HANDLE tmp_handle = handle; 00345 if (this->orb_core_->has_shutdown ()) 00346 tmp_handle = (ACE_HANDLE) id; 00347 00348 eh_reactor->remove_handler (tmp_handle, 00349 ACE_Event_Handler::ALL_EVENTS_MASK | 00350 ACE_Event_Handler::DONT_CALL); 00351 00352 // Also cancel any timers, we may create those for time-limited 00353 // buffering 00354 if (TAO_debug_level) 00355 { 00356 ACE_DEBUG ((LM_DEBUG, 00357 "TAO (%P|%t) - Connection_Handler[%d]::" 00358 "close_connection_eh, cancel all timers\n", 00359 handle)); 00360 } 00361 00362 eh_reactor->cancel_timer (eh); 00363 00364 // @@ This seems silly, the reactor is a much better authority to 00365 // find out if a handle is registered... 00366 this->transport ()->wait_strategy ()->is_registered (false); 00367 } 00368 00369 // This call should be made only after the cache and reactor are 00370 // cleaned up. This call can make upcalls to the application which 00371 // in turn can make remote calls (Bug 1551 and Bug 1482). The remote 00372 // calls from the application can try to use this handler from the 00373 // cache or from the reactor. So clean them up before this is 00374 // called. 00375 this->transport ()->send_connection_closed_notifications (); 00376 this->state_changed (TAO_LF_Event::LFS_CONNECTION_CLOSED, 00377 this->orb_core_->leader_follower ()); 00378 00379 if (TAO_debug_level) 00380 { 00381 ACE_DEBUG ((LM_DEBUG, 00382 "TAO (%P|%t) - Connection_Handler[%d]::" 00383 "close_connection_eh\n", 00384 id)); 00385 } 00386 00387 return 1; 00388 }
int TAO_Connection_Handler::close_handler | ( | void | ) | [virtual] |
A close() hook, called by the Transport Connector when they want to close this handler
Definition at line 430 of file Connection_Handler.cpp.
References TAO_LF_Event::LFS_CONNECTION_CLOSED, TAO_Transport::purge_entry(), TAO_Transport::remove_reference(), TAO_LF_Event::state_changed(), and transport().
Referenced by TAO_IIOP_Connection_Handler::close().
00431 { 00432 this->state_changed (TAO_LF_Event::LFS_CONNECTION_CLOSED, 00433 this->orb_core_->leader_follower ()); 00434 this->transport ()->purge_entry(); 00435 this->transport ()->remove_reference (); 00436 00437 // @@ I think that if the connection_pending state is true 00438 // when close_handler is calld, we should probably release 00439 // another reference so that the connector doesn't have to 00440 // worry about it. 00441 00442 return 0; 00443 }
ACE_INLINE void TAO_Connection_Handler::connection_pending | ( | void | ) |
When waiting for an asynchronous connection to complete an additional reference must be maintained, related to bugzilla #2417. However once the connection is successfully established, this reference must be removed. Using connection_pending allows the connection handler to know that it is opening as a result of a delayed asynch connection rather than an immediate synch connection, which has no additional reference needs.
Definition at line 48 of file Connection_Handler.inl.
References TAO_Transport::add_reference(), connection_pending_, and transport().
Referenced by TAO_IIOP_Connector::complete_connection().
00049 { 00050 if (!this->connection_pending_) 00051 { 00052 this->connection_pending_ = true; 00053 this->transport()->add_reference(); 00054 } 00055 }
virtual int TAO_Connection_Handler::handle_input | ( | ACE_HANDLE | fd | ) | [pure virtual] |
The event handler calls, here so that other objects who hold a reference to this object can call the event handler methods.
Implemented in TAO_IIOP_Connection_Handler.
int TAO_Connection_Handler::handle_input_eh | ( | ACE_HANDLE | h, | |
ACE_Event_Handler * | eh | |||
) | [protected] |
Implement the handle_input() callback.
Definition at line 217 of file Connection_Handler.cpp.
References ACE_DEBUG, close_connection(), handle_input_internal(), LM_DEBUG, and TAO_debug_level.
Referenced by TAO_IIOP_Connection_Handler::handle_input().
00219 { 00220 // If we can't process upcalls just return 00221 if (!this->transport ()->wait_strategy ()->can_process_upcalls ()) 00222 { 00223 if (TAO_debug_level > 6) 00224 ACE_DEBUG ((LM_DEBUG, 00225 "TAO (%P|%t) - Connection_Handler[%d]::handle_input_eh, " 00226 "not going to handle_input on transport " 00227 "because upcalls temporarily suspended on this thread\n", 00228 this->transport()->id())); 00229 return 0; 00230 } 00231 00232 int const result = this->handle_input_internal (h, eh); 00233 00234 if (result == -1) 00235 { 00236 this->close_connection (); 00237 return 0; 00238 } 00239 00240 return result; 00241 }
int TAO_Connection_Handler::handle_input_internal | ( | ACE_HANDLE | h, | |
ACE_Event_Handler * | eh | |||
) | [protected] |
Implement the handle_output() callback.
Definition at line 244 of file Connection_Handler.cpp.
References ACE_DEBUG, ACE_Event_Handler::get_handle(), TAO_Transport::handle_input(), TAO_Transport::id(), LM_DEBUG, pos_io_hook(), pre_io_hook(), TAO_debug_level, TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED, and transport().
Referenced by handle_input_eh().
00246 { 00247 // Let the transport know that it is used 00248 (void) this->transport ()->update_transport (); 00249 00250 // Grab the transport id now and use the cached value for printing 00251 // since the transport could dissappear by the time the thread 00252 // returns. 00253 size_t const t_id = 00254 this->transport ()->id (); 00255 00256 if (TAO_debug_level > 6) 00257 { 00258 ACE_HANDLE handle = eh->get_handle(); 00259 ACE_DEBUG ((LM_DEBUG, 00260 "TAO (%P|%t) - Connection_Handler[%d]::handle_input, " 00261 "handle = %d/%d\n", 00262 t_id, handle, h)); 00263 } 00264 00265 TAO_Resume_Handle resume_handle (this->orb_core (), eh->get_handle ()); 00266 00267 int return_value = 0; 00268 00269 this->pre_io_hook (return_value); 00270 if (return_value != 0) 00271 return return_value; 00272 00273 return_value = this->transport ()->handle_input (resume_handle); 00274 00275 this->pos_io_hook (return_value); 00276 00277 // Bug 1647; might need to change resume_handle's flag or 00278 // change handle_input return value. 00279 resume_handle.handle_input_return_value_hook(return_value); 00280 00281 if (TAO_debug_level > 6) 00282 { 00283 ACE_HANDLE handle = eh->get_handle (); 00284 ACE_DEBUG ((LM_DEBUG, 00285 "TAO (%P|%t) - Connection_Handler[%d]::handle_input, " 00286 "handle = %d/%d, retval = %d\n", 00287 t_id, handle, h, return_value)); 00288 } 00289 00290 if (return_value == -1) 00291 resume_handle.set_flag (TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED); 00292 return return_value; 00293 }
int TAO_Connection_Handler::handle_output_eh | ( | ACE_HANDLE | h, | |
ACE_Event_Handler * | eh | |||
) | [protected] |
Implement the handle_output() callback.
Definition at line 185 of file Connection_Handler.cpp.
References ACE_Event_Handler::get_handle(), TAO_Transport::handle_output(), pos_io_hook(), pre_io_hook(), TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED, and transport().
Referenced by TAO_IIOP_Connection_Handler::handle_output().
00187 { 00188 // Let the transport that it is going to be used 00189 (void) this->transport ()->update_transport (); 00190 00191 // Instantiate the resume handle here.. This will automatically 00192 // resume the handle once data is written.. 00193 TAO_Resume_Handle resume_handle (this->orb_core (), 00194 eh->get_handle ()); 00195 00196 int return_value = 0; 00197 this->pre_io_hook (return_value); 00198 if (return_value != 0) 00199 { 00200 resume_handle.set_flag (TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED); 00201 return return_value; 00202 } 00203 00204 return_value = this->transport ()->handle_output (0); 00205 00206 this->pos_io_hook (return_value); 00207 00208 if (return_value != 0) 00209 { 00210 resume_handle.set_flag (TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED); 00211 } 00212 00213 return return_value; 00214 }
ACE_INLINE bool TAO_Connection_Handler::is_closed | ( | void | ) | const |
Is the handler closed or timed out?
Definition at line 22 of file Connection_Handler.inl.
References TAO_LF_Event::LFS_CONNECTION_CLOSED, and TAO_LF_Event::LFS_TIMEOUT.
Referenced by TAO_Connector::check_connection_closure(), and TAO_Connector::wait_for_connection_completion().
00023 { 00024 return (this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED || 00025 this->state_ == TAO_LF_Event::LFS_TIMEOUT); 00026 }
ACE_INLINE bool TAO_Connection_Handler::is_connecting | ( | void | ) | const |
Is the handler in the process of being connected?
Definition at line 41 of file Connection_Handler.inl.
References TAO_LF_Event::LFS_CONNECTION_WAIT, and TAO_LF_Event::state_.
00042 { 00043 return this->state_ == TAO_LF_Event::LFS_CONNECTION_WAIT; 00044 }
ACE_INLINE bool TAO_Connection_Handler::is_open | ( | void | ) | const |
Is the handler open?
Definition at line 35 of file Connection_Handler.inl.
References TAO_LF_Event::LFS_SUCCESS, and TAO_LF_Event::state_.
Referenced by TAO_Connector::wait_for_connection_completion().
00036 { 00037 return this->state_ == TAO_LF_Event::LFS_SUCCESS; 00038 }
ACE_INLINE bool TAO_Connection_Handler::is_timeout | ( | void | ) | const |
Closed due to timeout?
Definition at line 29 of file Connection_Handler.inl.
References TAO_LF_Event::LFS_TIMEOUT.
Referenced by TAO_Connector::wait_for_connection_completion().
00030 { 00031 return (this->state_ == TAO_LF_Event::LFS_TIMEOUT); 00032 }
virtual int TAO_Connection_Handler::open_handler | ( | void * | ) | [pure virtual] |
A open () hook.
See Thread_Per_Connection_Handler for a use case
Implemented in TAO_IIOP_Connection_Handler.
Referenced by TAO_Thread_Per_Connection_Handler::open().
TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO_ORB_Core * TAO_Connection_Handler::orb_core | ( | void | ) | [protected] |
Return our TAO_ORB_Core pointer.
Definition at line 10 of file Connection_Handler.inl.
References orb_core_.
Referenced by TAO_IIOP_Connection_Handler::add_transport_to_cache(), TAO_IIOP_Connection_Handler::close_connection(), TAO_IIOP_Connection_Handler::open(), TAO_IIOP_Connection_Handler::set_dscp_codepoint(), and TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler().
00011 { 00012 return this->orb_core_; 00013 }
void TAO_Connection_Handler::pos_io_hook | ( | int & | return_value | ) | [protected, virtual] |
See the SSLIOP protocol for an interesting use-case
Definition at line 425 of file Connection_Handler.cpp.
Referenced by handle_input_internal(), and handle_output_eh().
void TAO_Connection_Handler::pre_io_hook | ( | int & | return_value | ) | [protected, virtual] |
See the SSLIOP protocol for an interesting use-case
Definition at line 420 of file Connection_Handler.cpp.
Referenced by handle_input_internal(), and handle_output_eh().
int TAO_Connection_Handler::release_os_resources | ( | void | ) | [virtual] |
Release the OS resources related to this handler.
Reimplemented in TAO_IIOP_Connection_Handler.
Definition at line 412 of file Connection_Handler.cpp.
int TAO_Connection_Handler::set_dscp_codepoint | ( | CORBA::Long | dscp_codepoint | ) | [virtual] |
Reimplemented in TAO_IIOP_Connection_Handler.
Definition at line 406 of file Connection_Handler.cpp.
int TAO_Connection_Handler::set_dscp_codepoint | ( | CORBA::Boolean | set_network_priority | ) | [virtual] |
Set the Diff-Serv codepoint on outgoing packets. Only has effect for remote protocols (e.g., IIOP); no effect for local protocols (UIOP). Default implementation is for local protocols. Remote protocols must overwrite implementation.
Reimplemented in TAO_IIOP_Connection_Handler.
Definition at line 400 of file Connection_Handler.cpp.
Referenced by TAO::Remote_Invocation::send_message().
int TAO_Connection_Handler::set_socket_option | ( | ACE_SOCK & | sock, | |
int | snd_size, | |||
int | rcv_size | |||
) | [protected] |
Set options on the socket.
Definition at line 64 of file Connection_Handler.cpp.
References ACE_CLOEXEC, ACE_IPC_SAP::enable(), ENOTSUP, ACE_SOCK::set_option(), SO_RCVBUF, SO_SNDBUF, and SOL_SOCKET.
00067 { 00068 #if !defined (ACE_LACKS_SOCKET_BUFSIZ) 00069 00070 if (snd_size != 0 00071 && sock.set_option (SOL_SOCKET, 00072 SO_SNDBUF, 00073 (void *) &snd_size, 00074 sizeof (snd_size)) == -1 00075 && errno != ENOTSUP) 00076 { 00077 return -1; 00078 } 00079 00080 if (rcv_size != 0 00081 && sock.set_option (SOL_SOCKET, 00082 SO_RCVBUF, 00083 (void *) &rcv_size, 00084 sizeof (int)) == -1 00085 && errno != ENOTSUP) 00086 { 00087 return -1; 00088 } 00089 #else 00090 ACE_UNUSED_ARG (snd_size); 00091 ACE_UNUSED_ARG (rcv_size); 00092 #endif /* !ACE_LACKS_SOCKET_BUFSIZ */ 00093 00094 // Set the close-on-exec flag for that file descriptor. If the 00095 // operation fails we are out of luck (some platforms do not support 00096 // it and return -1). 00097 (void) sock.enable (ACE_CLOEXEC); 00098 00099 return 0; 00100 }
int TAO_Connection_Handler::shared_open | ( | void | ) | [protected] |
A common function called at the start of any protocol-specific open. Returns -1 on a failure (although no failure mode is currently defined).
Definition at line 51 of file Connection_Handler.cpp.
References cancel_pending_connection().
00052 { 00053 // This reference counting is related to asynch connections. It 00054 // should probably be managed by the ACE_Strategy_Connector, since 00055 // that's really the reference being managed here. also, whether 00056 // open ultimately succeeds or fails, the connection attempted is 00057 // ending, so the reference must be removed in any case. 00058 this->cancel_pending_connection(); 00059 00060 return 0; 00061 }
int TAO_Connection_Handler::svc_i | ( | void | ) |
This method is invoked from the svc () method of the Svc_Handler Object.
Definition at line 103 of file Connection_Handler.cpp.
References ACE_DEBUG, ACE_TEXT, TAO_Transport::handle_input(), LM_DEBUG, ACE_Time_Value::msec(), TAO_debug_level, transport(), and TAO_Transport::update_transport().
Referenced by TAO_Thread_Per_Connection_Handler::svc().
00104 { 00105 int result = 0; 00106 00107 if (TAO_debug_level > 0) 00108 ACE_DEBUG ((LM_DEBUG, 00109 ACE_TEXT ("TAO (%P|%t) - Connection_Handler::svc_i begin\n"))); 00110 00111 // Here we simply synthesize the "typical" event loop one might find 00112 // in a reactive handler, except that this can simply block waiting 00113 // for input. 00114 00115 ACE_Time_Value *max_wait_time = 0; 00116 ACE_Time_Value timeout; 00117 ACE_Time_Value current_timeout; 00118 00119 if (this->orb_core_->thread_per_connection_timeout (timeout)) 00120 { 00121 current_timeout = timeout; 00122 max_wait_time = ¤t_timeout; 00123 } 00124 00125 TAO_Resume_Handle rh (this->orb_core_, 00126 ACE_INVALID_HANDLE); 00127 00128 // We exit of the loop if 00129 // - If the ORB core is shutdown by another thread 00130 // - Or if the transport is null. This could happen if an error 00131 // occured. 00132 // - Or if during processing a return value of -1 is received. 00133 while (!this->orb_core_->has_shutdown () 00134 && result >= 0) 00135 { 00136 // Let the transport know that it is used 00137 (void) this->transport ()->update_transport (); 00138 00139 result = this->transport ()->handle_input (rh, max_wait_time); 00140 00141 if (result == -1 && errno == ETIME) 00142 { 00143 // Ignore timeouts, they are only used to wake up and 00144 // shutdown. 00145 result = 0; 00146 00147 // Reset errno to make sure we don't trip over an old value 00148 // of errno in case it is not reset when the recv() call 00149 // fails if the socket has been closed. 00150 errno = 0; 00151 } 00152 else if (result == -1) 00153 { 00154 // Something went wrong with the socket. Just quit 00155 return result; 00156 } 00157 00158 current_timeout = timeout; 00159 00160 if (TAO_debug_level > 0) 00161 ACE_DEBUG ((LM_DEBUG, 00162 "TAO (%P|%t) - Connection_Handler::svc_i - " 00163 "loop <%d>\n", current_timeout.msec ())); 00164 } 00165 00166 if (TAO_debug_level > 0) 00167 ACE_DEBUG ((LM_DEBUG, 00168 "TAO (%P|%t) - Connection_Handler::svc_i end\n")); 00169 00170 return result; 00171 }
void TAO_Connection_Handler::transport | ( | TAO_Transport * | transport | ) |
Set the underlying transport object.
Definition at line 174 of file Connection_Handler.cpp.
References ACE_Event_Handler::Reference_Counting_Policy::ENABLED, TAO_Transport::event_handler_i(), ACE_Event_Handler::reference_counting_policy(), transport(), and transport_.
00175 { 00176 this->transport_ = transport; 00177 00178 // Enable reference counting on the event handler. 00179 this->transport_->event_handler_i ()->reference_counting_policy ().value ( 00180 ACE_Event_Handler::Reference_Counting_Policy::ENABLED 00181 ); 00182 }
ACE_INLINE TAO_Transport * TAO_Connection_Handler::transport | ( | void | ) |
Return the underlying transport object.
Definition at line 16 of file Connection_Handler.inl.
References transport_.
Referenced by TAO_LF_Multi_Event::base_transport(), cancel_pending_connection(), close_connection_eh(), close_handler(), connection_pending(), handle_input_internal(), handle_output_eh(), TAO_IIOP_Connection_Handler::open(), TAO_IIOP_Connection_Handler::process_listen_point_list(), svc_i(), TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler(), transport(), TAO_Connect_Strategy::wait(), TAO_Connector::wait_for_connection_completion(), TAO_IIOP_Connection_Handler::~TAO_IIOP_Connection_Handler(), and TAO_Thread_Per_Connection_Handler::~TAO_Thread_Per_Connection_Handler().
00017 { 00018 return this->transport_; 00019 }
bool TAO_Connection_Handler::connection_pending_ [private] |
Stores the connection pending state.
Definition at line 212 of file Connection_Handler.h.
Referenced by cancel_pending_connection(), and connection_pending().
ACE_Lock* TAO_Connection_Handler::lock_ [private] |
Internal state lock, needs to be separate from the reference count / pending upcalls lock because they interleave.
Definition at line 209 of file Connection_Handler.h.
Referenced by ~TAO_Connection_Handler().
TAO_ORB_Core* const TAO_Connection_Handler::orb_core_ [private] |
Pointer to the TAO_ORB_Core.
Definition at line 202 of file Connection_Handler.h.
Referenced by orb_core().
TAO_Transport* TAO_Connection_Handler::transport_ [private] |
Transport object reference.
Definition at line 205 of file Connection_Handler.h.
Referenced by transport().