#include <IIOP_Connection_Handler.h>
Inheritance diagram for TAO_IIOP_Connection_Handler:
Public Member Functions | |
TAO_IIOP_Connection_Handler (ACE_Thread_Manager *=0) | |
TAO_IIOP_Connection_Handler (TAO_ORB_Core *orb_core) | |
Constructor. | |
~TAO_IIOP_Connection_Handler (void) | |
Destructor. | |
virtual int | open (void *) |
int | close (u_long=0) |
int | add_transport_to_cache (void) |
Add ourselves to Cache. | |
int | process_listen_point_list (IIOP::ListenPointList &listen_list) |
Process the listen_list. | |
int | enable_network_priority (void) |
Check if network priority needs to be enabled. | |
int | set_dscp_codepoint (CORBA::Boolean set_network_priority) |
Set Diff-Serv codepoint on outgoing packets. | |
int | set_dscp_codepoint (CORBA::Long dscp_codepoint) |
virtual int | open_handler (void *) |
A open () hook. | |
void | abort (void) |
Event Handler overloads | |
virtual int | resume_handler (void) |
virtual int | close_connection (void) |
Close the underlying connection. | |
virtual int | handle_input (ACE_HANDLE) |
virtual int | handle_output (ACE_HANDLE) |
virtual int | handle_close (ACE_HANDLE, ACE_Reactor_Mask) |
virtual int | handle_timeout (const ACE_Time_Value ¤t_time, const void *act=0) |
Protected Member Functions | |
int | set_tos (int tos) |
TAO_Connection Handler overloads | |
virtual int | release_os_resources (void) |
Release the OS resources related to this handler. | |
Private Attributes | |
int | dscp_codepoint_ |
Stores the type of service value. |
The Connection handler which is common for the Acceptor and the Connector
Definition at line 61 of file IIOP_Connection_Handler.h.
|
Definition at line 24 of file IIOP_Connection_Handler.cpp. References ACE_ASSERT, IPDSFIELD_DSCP_DEFAULT, and TAO_IIOP_SVC_HANDLER.
00025 : TAO_IIOP_SVC_HANDLER (t, 0 , 0), 00026 TAO_Connection_Handler (0), 00027 dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) 00028 { 00029 // This constructor should *never* get called, it is just here to 00030 // make the compiler happy: the default implementation of the 00031 // Creation_Strategy requires a constructor with that signature, we 00032 // don't use that implementation, but some (most?) compilers 00033 // instantiate it anyway. 00034 ACE_ASSERT (0); 00035 } |
|
Constructor.
Definition at line 38 of file IIOP_Connection_Handler.cpp. References ACE_NEW, IPDSFIELD_DSCP_DEFAULT, TAO_IIOP_SVC_HANDLER, and TAO_Connection_Handler::transport().
00040 : TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0), 00041 TAO_Connection_Handler (orb_core), 00042 dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) 00043 { 00044 TAO_IIOP_Transport* specific_transport = 0; 00045 ACE_NEW (specific_transport, 00046 TAO_IIOP_Transport (this, orb_core)); 00047 00048 // store this pointer (indirectly increment ref count) 00049 this->transport (specific_transport); 00050 } |
|
Destructor.
Definition at line 52 of file IIOP_Connection_Handler.cpp. References ACE_ERROR, ACE_TEXT, LM_ERROR, release_os_resources(), TAO_debug_level, and TAO_Connection_Handler::transport().
00053 { 00054 delete this->transport (); 00055 int const result = 00056 this->release_os_resources (); 00057 00058 if (result == -1 && TAO_debug_level) 00059 { 00060 ACE_ERROR ((LM_ERROR, 00061 ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::") 00062 ACE_TEXT("~IIOP_Connection_Handler, ") 00063 ACE_TEXT("release_os_resources() failed %m\n"))); 00064 } 00065 } |
|
This is used during a canceled connection attempt. Force the SO_LINGER timeout to 0 so that when the peer is closed, it won't hang around. Definition at line 532 of file IIOP_Connection_Handler.cpp. References ACE_DEBUG, ACE_TEXT, LM_DEBUG, SO_LINGER, SOL_SOCKET, and TAO_debug_level. Referenced by TAO_IIOP_Connector::cancel_svc_handler().
00533 { 00534 struct linger lval; 00535 lval.l_onoff = 1; 00536 lval.l_linger = 0; 00537 00538 if (this->peer ().set_option(SOL_SOCKET, 00539 SO_LINGER, 00540 (void*) &lval, 00541 sizeof (lval)) == -1) 00542 { 00543 if (TAO_debug_level) 00544 { 00545 ACE_DEBUG ((LM_DEBUG, 00546 ACE_TEXT ("TAO (%P|%t) Unable to set ") 00547 ACE_TEXT ("SO_LINGER on %d\n"), 00548 this->peer ().get_handle ())); 00549 } 00550 } 00551 } |
|
Add ourselves to Cache.
Definition at line 359 of file IIOP_Connection_Handler.cpp. References TAO::Transport_Cache_Manager::cache_idle_transport(), TAO_ORB_Core::lane_resources(), TAO_Connection_Handler::orb_core(), and TAO_Thread_Lane_Resources::transport_cache().
00360 { 00361 ACE_INET_Addr addr; 00362 00363 // Get the peername. 00364 if (this->peer ().get_remote_addr (addr) == -1) 00365 return -1; 00366 00367 // Construct an IIOP_Endpoint object 00368 TAO_IIOP_Endpoint endpoint ( 00369 addr, 00370 this->orb_core()->orb_params()->cache_incoming_by_dotted_decimal_address ()); 00371 00372 // Construct a property object 00373 TAO_Base_Transport_Property prop (&endpoint); 00374 00375 TAO::Transport_Cache_Manager &cache = 00376 this->orb_core ()->lane_resources ().transport_cache (); 00377 00378 // Idle the transport.. 00379 return cache.cache_idle_transport (&prop, 00380 this->transport ()); 00381 } |
|
Close called by the Acceptor or Connector when connection establishment fails. Definition at line 347 of file IIOP_Connection_Handler.cpp. References TAO_Connection_Handler::close_handler(). Referenced by TAO_IIOP_Connector::complete_connection(), and handle_timeout().
00348 { 00349 return this->close_handler (); 00350 } |
|
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.
Implements TAO_Connection_Handler. Definition at line 263 of file IIOP_Connection_Handler.cpp. References ACE_DEBUG, ACE_TEXT, TAO_Connection_Handler::close_connection_eh(), TAO_ORB_Parameters::linger(), LM_DEBUG, TAO_Connection_Handler::orb_core(), TAO_ORB_Core::orb_params(), SO_LINGER, SOL_SOCKET, and TAO_debug_level. Referenced by handle_output().
00264 { 00265 // To maintain maximum compatibility, we only set this socket option 00266 // if the user has provided a linger timeout. 00267 int const linger = this->orb_core()->orb_params()->linger (); 00268 if (linger != -1) 00269 { 00270 struct linger lval; 00271 lval.l_onoff = 1; 00272 lval.l_linger = (u_short)linger; 00273 if (this->peer ().set_option(SOL_SOCKET, 00274 SO_LINGER, 00275 (void*) &lval, 00276 sizeof (lval)) == -1) 00277 { 00278 if (TAO_debug_level) 00279 { 00280 ACE_DEBUG ((LM_DEBUG, 00281 ACE_TEXT ("TAO (%P|%t) Unable to set ") 00282 ACE_TEXT ("SO_LINGER on %d\n"), 00283 this->peer ().get_handle ())); 00284 } 00285 } 00286 } 00287 00288 return this->close_connection_eh (this); 00289 } |
|
Check if network priority needs to be enabled.
|
|
Definition at line 339 of file IIOP_Connection_Handler.cpp. References ACE_ASSERT.
00341 { 00342 ACE_ASSERT (0); 00343 return 0; 00344 } |
|
The event handler calls, here so that other objects who hold a reference to this object can call the event handler methods. Implements TAO_Connection_Handler. Definition at line 292 of file IIOP_Connection_Handler.cpp. References TAO_Connection_Handler::handle_input_eh().
00293 { 00294 return this->handle_input_eh (h, this); 00295 } |
|
Definition at line 298 of file IIOP_Connection_Handler.cpp. References close_connection(), and TAO_Connection_Handler::handle_output_eh().
00299 { 00300 const int result = 00301 this->handle_output_eh (handle, this); 00302 00303 if (result == -1) 00304 { 00305 this->close_connection (); 00306 return 0; 00307 } 00308 00309 return result; 00310 } |
|
Definition at line 314 of file IIOP_Connection_Handler.cpp. References close(), and TAO_LF_Event::reset_state().
00316 { 00317 // Using this to ensure this instance will be deleted (if necessary) 00318 // only after reset_state(). Without this, when this refcount==1 - 00319 // the call to close() will cause a call to remove_reference() which 00320 // will delete this. At that point this->reset_state() is in no 00321 // man's territory and that causes SEGV on some platforms (Windows!) 00322 00323 TAO_Auto_Reference<TAO_IIOP_Connection_Handler> safeguard (*this); 00324 00325 // NOTE: Perhaps not the best solution, as it feels like the upper 00326 // layers should be responsible for this? 00327 00328 // We don't use this upcall for I/O. This is only used by the 00329 // Connector to indicate that the connection timedout. Therefore, 00330 // we should call close() 00331 00332 int const ret = this->close (); 00333 this->reset_state (TAO_LF_Event::LFS_TIMEOUT); 00334 00335 return ret; 00336 } |
|
Called by the Definition at line 81 of file IIOP_Connection_Handler.cpp. References ACE_DEBUG, ACE_ERROR, ACE_IPPROTO_TCP, ACE_NONBLOCK, ACE_TCHAR, ACE_TEXT, ACE_INET_Addr::addr_to_string(), TAO_Protocols_Hooks::client_protocol_properties_at_orb_level(), TAO_ORB_Parameters::connect_ipv6_only(), TAO_IIOP_Protocol_Properties::dont_route_, ENOTSUP, ACE_INET_Addr::get_host_addr(), ACE_INET_Addr::get_port_number(), TAO_ORB_Core::get_protocols_hooks(), ACE_INET_Addr::is_ipv4_mapped_ipv6(), TAO_IIOP_Protocol_Properties::keep_alive_, LM_DEBUG, LM_ERROR, MAXHOSTNAMELEN, TAO_IIOP_Protocol_Properties::no_delay_, TAO_ORB_Parameters::nodelay(), TAO_Wait_Strategy::non_blocking(), TAO_Transport::opened_as(), TAO_Connection_Handler::orb_core(), TAO_ORB_Core::orb_params(), TAO_Transport::post_open(), TAO_IIOP_Protocol_Properties::recv_buffer_size_, TAO_IIOP_Protocol_Properties::send_buffer_size_, TAO_Protocols_Hooks::server_protocol_properties_at_orb_level(), TAO_Connection_Handler::set_socket_option(), TAO_Connection_Handler::shared_open(), TAO_ORB_Parameters::sock_dontroute(), TAO_ORB_Parameters::sock_keepalive(), TAO_ORB_Parameters::sock_rcvbuf_size(), TAO_ORB_Parameters::sock_sndbuf_size(), SOL_SOCKET, TAO_LF_Event::state_changed(), TAO_debug_level, TCP_NODELAY, TAO_Connection_Handler::transport(), and TAO_Transport::wait_strategy(). Referenced by open_handler().
00082 { 00083 if (this->shared_open() == -1) 00084 return -1; 00085 00086 TAO_IIOP_Protocol_Properties protocol_properties; 00087 00088 // Initialize values from ORB params. 00089 protocol_properties.send_buffer_size_ = 00090 this->orb_core ()->orb_params ()->sock_sndbuf_size (); 00091 protocol_properties.recv_buffer_size_ = 00092 this->orb_core ()->orb_params ()->sock_rcvbuf_size (); 00093 protocol_properties.no_delay_ = 00094 this->orb_core ()->orb_params ()->nodelay (); 00095 protocol_properties.keep_alive_ = 00096 this->orb_core ()->orb_params ()->sock_keepalive (); 00097 protocol_properties.dont_route_ = 00098 this->orb_core ()->orb_params ()->sock_dontroute (); 00099 00100 TAO_Protocols_Hooks *tph = this->orb_core ()->get_protocols_hooks (); 00101 00102 if (tph != 0) 00103 { 00104 try 00105 { 00106 if (this->transport ()->opened_as () == TAO::TAO_CLIENT_ROLE) 00107 { 00108 tph->client_protocol_properties_at_orb_level (protocol_properties); 00109 } 00110 else 00111 { 00112 tph->server_protocol_properties_at_orb_level (protocol_properties); 00113 } 00114 } 00115 catch (const ::CORBA::Exception&) 00116 { 00117 return -1; 00118 } 00119 } 00120 00121 if (this->set_socket_option (this->peer (), 00122 protocol_properties.send_buffer_size_, 00123 protocol_properties.recv_buffer_size_) == -1) 00124 { 00125 return -1; 00126 } 00127 00128 #if !defined (ACE_LACKS_TCP_NODELAY) 00129 if (this->peer ().set_option (ACE_IPPROTO_TCP, 00130 TCP_NODELAY, 00131 (void *) &protocol_properties.no_delay_, 00132 sizeof (protocol_properties.no_delay_)) == -1) 00133 return -1; 00134 #endif /* ! ACE_LACKS_TCP_NODELAY */ 00135 00136 if (protocol_properties.keep_alive_) 00137 { 00138 if (this->peer (). 00139 set_option (SOL_SOCKET, 00140 SO_KEEPALIVE, 00141 (void *) &protocol_properties.keep_alive_, 00142 sizeof (protocol_properties.keep_alive_)) == -1 00143 && errno != ENOTSUP) 00144 { 00145 return -1; 00146 } 00147 } 00148 00149 #if !defined (ACE_LACKS_SO_DONTROUTE) 00150 if (protocol_properties.dont_route_) 00151 { 00152 if (this->peer (). 00153 set_option (SOL_SOCKET, 00154 SO_DONTROUTE, 00155 (void *) &protocol_properties.dont_route_, 00156 sizeof (protocol_properties.dont_route_)) == -1 00157 && errno != ENOTSUP) 00158 { 00159 return -1; 00160 } 00161 } 00162 #endif /* ! ACE_LACKS_SO_DONTROUTE */ 00163 00164 if (this->transport ()->wait_strategy ()->non_blocking () 00165 || this->transport ()->opened_as () == TAO::TAO_SERVER_ROLE) 00166 { 00167 if (this->peer ().enable (ACE_NONBLOCK) == -1) 00168 return -1; 00169 } 00170 00171 // Called by the <Strategy_Acceptor> when the handler is 00172 // completely connected. 00173 00174 ACE_INET_Addr remote_addr; 00175 if (this->peer ().get_remote_addr (remote_addr) == -1) 00176 return -1; 00177 00178 ACE_INET_Addr local_addr; 00179 if (this->peer ().get_local_addr (local_addr) == -1) 00180 return -1; 00181 00182 if (TAO_debug_level > 2) 00183 ACE_DEBUG ((LM_DEBUG, 00184 ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::open, ") 00185 ACE_TEXT("The local addr is <%s:%d> \n"), 00186 local_addr.get_host_addr (), 00187 local_addr.get_port_number())); 00188 00189 if (local_addr == remote_addr) 00190 { 00191 if (TAO_debug_level > 0) 00192 { 00193 ACE_TCHAR remote_as_string[MAXHOSTNAMELEN + 16]; 00194 ACE_TCHAR local_as_string[MAXHOSTNAMELEN + 16]; 00195 00196 (void) remote_addr.addr_to_string (remote_as_string, 00197 sizeof(remote_as_string)); 00198 (void) local_addr.addr_to_string (local_as_string, 00199 sizeof(local_as_string)); 00200 ACE_ERROR ((LM_ERROR, 00201 ACE_TEXT("TAO(%P|%t) - IIOP_Connection_Handler::open, ") 00202 ACE_TEXT("Holy Cow! The remote addr and ") 00203 ACE_TEXT("local addr are identical (%s == %s)\n"), 00204 remote_as_string, local_as_string)); 00205 } 00206 return -1; 00207 } 00208 00209 #if defined (ACE_HAS_IPV6) && !defined (ACE_HAS_IPV6_V6ONLY) 00210 // Check if we need to invalidate accepted connections 00211 // from IPv4 mapped IPv6 addresses 00212 if (this->orb_core ()->orb_params ()->connect_ipv6_only () && 00213 remote_addr.is_ipv4_mapped_ipv6 ()) 00214 { 00215 if (TAO_debug_level > 0) 00216 { 00217 ACE_TCHAR remote_as_string[MAXHOSTNAMELEN + 16]; 00218 00219 (void) remote_addr.addr_to_string (remote_as_string, 00220 sizeof(remote_as_string)); 00221 00222 ACE_ERROR ((LM_ERROR, 00223 ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::open, ") 00224 ACE_TEXT("invalid connection from IPv4 mapped IPv6 interface <%s>!\n"), 00225 remote_as_string)); 00226 } 00227 return -1; 00228 } 00229 #endif /* ACE_HAS_IPV6 && ACE_HAS_IPV6_V6ONLY */ 00230 00231 if (TAO_debug_level > 0) 00232 { 00233 ACE_TCHAR client_addr[MAXHOSTNAMELEN + 16]; 00234 00235 // Verify that we can resolve the peer hostname. 00236 if (remote_addr.addr_to_string (client_addr, sizeof (client_addr)) == -1) 00237 return -1; 00238 00239 ACE_DEBUG ((LM_DEBUG, 00240 ACE_TEXT ("TAO (%P|%t) - IIOP_Connection_Handler::open, IIOP ") 00241 ACE_TEXT ("connection to peer <%s> on %d\n"), 00242 client_addr, this->peer ().get_handle ())); 00243 } 00244 00245 // Set that the transport is now connected, if fails we return -1 00246 // Use C-style cast b/c otherwise we get warnings on lots of 00247 // compilers 00248 if (!this->transport ()->post_open ((size_t) this->get_handle ())) 00249 return -1; 00250 this->state_changed (TAO_LF_Event::LFS_SUCCESS, 00251 this->orb_core ()->leader_follower ()); 00252 00253 return 0; 00254 } |
|
A open () hook. See Thread_Per_Connection_Handler for a use case Implements TAO_Connection_Handler. Definition at line 75 of file IIOP_Connection_Handler.cpp. References open().
00076 { 00077 return this->open (v); 00078 } |
|
Process the listen_list.
Definition at line 384 of file IIOP_Connection_Handler.cpp. References ACE_DEBUG, ACE_ERROR, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, IIOP::ListenPoint::host, IIOP::ListenPointList, LM_DEBUG, LM_ERROR, TAO_Transport::make_idle(), IIOP::ListenPoint::port, TAO_Transport::recache_transport(), TAO_Transport_Descriptor_Interface::set_bidir_flag(), TAO_debug_level, and TAO_Connection_Handler::transport(). Referenced by TAO_IIOP_Transport::tear_listen_point_list().
00386 { 00387 // Get the size of the list 00388 const CORBA::ULong len = listen_list.length (); 00389 00390 if (TAO_debug_level > 0 && len == 0) 00391 { 00392 ACE_ERROR ((LM_ERROR, 00393 ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::") 00394 ACE_TEXT("process_listen_point_list, ") 00395 ACE_TEXT("Received list of size 0, check client config.\n"))); 00396 } 00397 00398 for (CORBA::ULong i = 0; i < len; ++i) 00399 { 00400 IIOP::ListenPoint listen_point = listen_list[i]; 00401 ACE_INET_Addr addr (listen_point.port, 00402 listen_point.host.in ()); 00403 00404 if (TAO_debug_level > 0) 00405 { 00406 ACE_DEBUG ((LM_DEBUG, 00407 ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::") 00408 ACE_TEXT("process_listen_point_list, ") 00409 ACE_TEXT("Listening port [%d] on [%s]\n"), 00410 listen_point.port, 00411 ACE_TEXT_CHAR_TO_TCHAR(listen_point.host.in ()))); 00412 } 00413 00414 // Construct an IIOP_Endpoint object using the host as provided 00415 // in the listen point list. We must use host in that form because 00416 // that's also how the ORB on the other side will advertise the host 00417 // in an IOR. 00418 TAO_IIOP_Endpoint endpoint (listen_point.host.in (), 00419 listen_point.port, addr); 00420 00421 // Construct a property object 00422 TAO_Base_Transport_Property prop (&endpoint); 00423 00424 // Mark the connection as bidirectional 00425 prop.set_bidir_flag (1); 00426 00427 // The property for this handler has changed. Recache the 00428 // handler with this property 00429 int retval = 00430 this->transport ()->recache_transport (&prop); 00431 00432 if (retval == -1) 00433 return retval; 00434 00435 // Make the handler idle and ready for use 00436 this->transport ()->make_idle (); 00437 } 00438 00439 return 0; 00440 } |
|
Release the OS resources related to this handler.
Reimplemented from TAO_Connection_Handler. Definition at line 353 of file IIOP_Connection_Handler.cpp. Referenced by ~TAO_IIOP_Connection_Handler().
00354 {
00355 return this->peer ().close ();
00356 }
|
|
Definition at line 257 of file IIOP_Connection_Handler.cpp.
00258 { 00259 return ACE_Event_Handler::ACE_APPLICATION_RESUMES_HANDLER; 00260 } |
|
Reimplemented from TAO_Connection_Handler. Definition at line 496 of file IIOP_Connection_Handler.cpp. References IPDSFIELD_DSCP_DEFAULT, and set_tos().
00497 { 00498 int tos = IPDSFIELD_DSCP_DEFAULT << 2; 00499 00500 CORBA::Long codepoint = dscp_codepoint; 00501 00502 tos = static_cast<int> (codepoint) << 2; 00503 00504 this->set_tos (tos); 00505 00506 return 0; 00507 } |
|
Set Diff-Serv codepoint on outgoing packets.
Reimplemented from TAO_Connection_Handler. Definition at line 510 of file IIOP_Connection_Handler.cpp. References TAO_Protocols_Hooks::get_dscp_codepoint(), TAO_ORB_Core::get_protocols_hooks(), IPDSFIELD_DSCP_DEFAULT, TAO_Connection_Handler::orb_core(), and set_tos().
00511 { 00512 int tos = IPDSFIELD_DSCP_DEFAULT << 2; 00513 00514 if (set_network_priority) 00515 { 00516 TAO_Protocols_Hooks *tph = this->orb_core ()->get_protocols_hooks (); 00517 00518 if (tph != 0) 00519 { 00520 CORBA::Long codepoint = 00521 tph->get_dscp_codepoint (); 00522 00523 tos = static_cast<int> (codepoint) << 2; 00524 this->set_tos (tos); 00525 } 00526 } 00527 00528 return 0; 00529 } |
|
Definition at line 443 of file IIOP_Connection_Handler.cpp. References ACE_DEBUG, dscp_codepoint_, ACE_Addr::get_type(), IPPROTO_IP, LM_DEBUG, and TAO_debug_level. Referenced by set_dscp_codepoint().
00444 { 00445 if (tos != this->dscp_codepoint_) 00446 { 00447 int result = 0; 00448 #if defined (ACE_HAS_IPV6) 00449 ACE_INET_Addr local_addr; 00450 if (this->peer ().get_local_addr (local_addr) == -1) 00451 return -1; 00452 else if (local_addr.get_type () == AF_INET6) 00453 # if !defined (IPV6_TCLASS) 00454 // IPv6 defines option IPV6_TCLASS for specifying traffic class/priority 00455 // but not many implementations yet (very new;-). 00456 { 00457 if (TAO_debug_level) 00458 { 00459 ACE_DEBUG ((LM_DEBUG, 00460 "TAO (%P|%t) - IIOP_Connection_Handler::" 00461 "set_dscp_codepoint -> IPV6_TCLASS not supported yet\n")); 00462 } 00463 return 0; 00464 } 00465 # else /* !IPV6_TCLASS */ 00466 result = this->peer ().set_option (IPPROTO_IPV6, 00467 IPV6_TCLASS, 00468 (int *) &tos , 00469 (int) sizeof (tos)); 00470 else 00471 # endif /* IPV6_TCLASS */ 00472 #endif /* ACE_HAS_IPV6 */ 00473 result = this->peer ().set_option (IPPROTO_IP, 00474 IP_TOS, 00475 (int *) &tos , 00476 (int) sizeof (tos)); 00477 00478 if (TAO_debug_level) 00479 { 00480 ACE_DEBUG ((LM_DEBUG, 00481 "TAO (%P|%t) - IIOP_Connection_Handler::" 00482 "set_dscp_codepoint -> dscp: %x; result: %d; %s\n", 00483 tos, 00484 result, 00485 result == -1 ? "try running as superuser" : "")); 00486 } 00487 00488 // On successful setting of TOS field. 00489 if (result == 0) 00490 this->dscp_codepoint_ = tos; 00491 } 00492 return 0; 00493 } |
|
Stores the type of service value.
Definition at line 131 of file IIOP_Connection_Handler.h. Referenced by set_tos(). |