#include <UPIPE_Connector.h>
Public Types | |
typedef ACE_UPIPE_Addr | PEER_ADDR |
typedef ACE_UPIPE_Stream | PEER_STREAM |
Public Member Functions | |
ACE_UPIPE_Connector (void) | |
Default constructor. | |
ACE_UPIPE_Connector (ACE_UPIPE_Stream &new_stream, const ACE_UPIPE_Addr &addr, ACE_Time_Value *timeout=0, const ACE_Addr &local_sap=ACE_Addr::sap_any, int reuse_addr=0, int flags=O_RDWR, int perms=0) | |
int | connect (ACE_UPIPE_Stream &new_stream, const ACE_UPIPE_Addr &addr, ACE_Time_Value *timeout=0, const ACE_Addr &local_sap=ACE_Addr::sap_any, int reuse_addr=0, int flags=O_RDWR, int perms=0) |
int | reset_new_handle (ACE_HANDLE handle) |
Resets any event associations on this handle. | |
void | dump (void) const |
Dump the state of an object. | |
Public Attributes | |
ACE_ALLOC_HOOK_DECLARE | |
Declare the dynamic allocation hooks. |
Definition at line 34 of file UPIPE_Connector.h.
|
Definition at line 95 of file UPIPE_Connector.h. |
|
Definition at line 96 of file UPIPE_Connector.h. |
|
Default constructor.
Definition at line 29 of file UPIPE_Connector.cpp. References ACE_TRACE.
00030 { 00031 ACE_TRACE ("ACE_UPIPE_Connector::ACE_UPIPE_Connector"); 00032 } |
|
Actively connect and produce a new_stream if things go well. The addr is the address that we are trying to connect with. The timeout is the amount of time to wait to connect. If it's 0 then we block indefinitely. If *timeout == {0, 0} then the connection is done using non-blocking mode. In this case, if the connection can't be made immediately the value of -1 is returned with <errno == EWOULDBLOCK>. If *timeout > {0, 0} then this is the maximum amount of time to wait before timing out. If the time expires before the connection is made <errno == ETIME>. The local_sap is the value of local address to bind to. If it's the default value of ACE_Addr::sap_any then the user is letting the OS do the binding. If reuse_addr == 1 then the local_addr is reused, even if it hasn't been cleanedup yet. The flags and perms arguments are passed down to the open() method. Definition at line 9 of file UPIPE_Connector.inl. References ACE_ERROR, ACE_TEXT, ACE_TRACE, connect(), ETIME, EWOULDBLOCK, and LM_ERROR.
00016 { 00017 ACE_TRACE ("ACE_UPIPE_Connector::ACE_UPIPE_Connector"); 00018 if (this->connect (new_stream, addr, timeout, local_sap, 00019 reuse_addr, flags, perms) == -1 00020 && timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIME)) 00021 ACE_ERROR ((LM_ERROR, 00022 ACE_TEXT ("address %s, %p\n"), 00023 addr.get_path_name (), 00024 ACE_TEXT ("ACE_UPIPE_Connector"))); 00025 } |
|
Actively connect and produce a new_stream if things go well. The addr is the address that we are trying to connect with. The timeout is the amount of time to wait to connect. If it's 0 then we block indefinitely. If *timeout == {0, 0} then the connection is done using non-blocking mode. In this case, if the connection can't be made immediately the value of -1 is returned with <errno == EWOULDBLOCK>. If *timeout > {0, 0} then this is the maximum amount of time to wait before timing out. If the time expires before the connection is made <errno == ETIME>. The local_sap is the value of local address to bind to. If it's the default value of ACE_Addr::sap_any then the user is letting the OS do the binding. If reuse_addr == 1 then the local_addr is reused, even if it hasn't been cleanedup yet. The flags and perms arguments are passed down to the open() method. Definition at line 35 of file UPIPE_Connector.cpp. References ACE_ASSERT, ACE_ERROR, ACE_GUARD_RETURN, ACE_TEXT, ACE_TRACE, ACE_UPIPE_Stream::get_handle(), ACE::handle_timed_open(), ACE_OS::isastream(), LM_ERROR, ACE_UPIPE_Stream::recv(), ACE_UPIPE_Stream::reference_count_, ACE_UPIPE_Stream::remote_addr_, ACE_IPC_SAP::set_handle(), ssize_t, and ACE_OS::write(). Referenced by ACE_UPIPE_Connector().
00042 { 00043 ACE_TRACE ("ACE_UPIPE_Connector::connect"); 00044 ACE_ASSERT (new_stream.get_handle () == ACE_INVALID_HANDLE); 00045 00046 ACE_HANDLE handle = ACE::handle_timed_open (timeout, 00047 addr.get_path_name (), 00048 flags, perms); 00049 00050 if (handle == ACE_INVALID_HANDLE) 00051 return -1; 00052 #if !defined (ACE_WIN32) 00053 else if (ACE_OS::isastream (handle) != 1) 00054 return -1; 00055 #endif 00056 else // We're connected! 00057 { 00058 ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, new_stream.lock_, -1)); 00059 00060 ACE_UPIPE_Stream *ustream = &new_stream; 00061 00062 new_stream.set_handle (handle); 00063 new_stream.remote_addr_ = addr; // class copy. 00064 new_stream.reference_count_++; 00065 00066 // Now send the address of our ACE_UPIPE_Stream over this pipe 00067 // to our corresponding ACE_UPIPE_Acceptor, so he may link the 00068 // two streams. 00069 ssize_t result = ACE_OS::write (handle, 00070 (const char *) &ustream, 00071 sizeof ustream); 00072 if (result == -1) 00073 ACE_ERROR ((LM_ERROR, 00074 ACE_TEXT ("ACE_UPIPE_Connector %p\n"), 00075 ACE_TEXT ("write to pipe failed"))); 00076 00077 // Wait for confirmation of stream linking. 00078 ACE_Message_Block *mb_p = 0; 00079 00080 // Our part is done, wait for server to confirm connection. 00081 result = new_stream.recv (mb_p, 0); 00082 00083 // Do *not* coalesce the following two checks for result == -1. 00084 // They perform different checks and cannot be merged. 00085 if (result == -1) 00086 ACE_ERROR ((LM_ERROR, 00087 ACE_TEXT ("ACE_UPIPE_Connector %p\n"), 00088 ACE_TEXT ("no confirmation from server"))); 00089 else 00090 // Close down the new_stream at this point in order to 00091 // conserve handles. Note that we don't need the SPIPE 00092 // connection anymore since we're linked via the Message_Queue 00093 // now. 00094 new_stream.ACE_SPIPE::close (); 00095 return static_cast<int> (result); 00096 } 00097 } |
|
Dump the state of an object.
Definition at line 22 of file UPIPE_Connector.cpp. References ACE_TRACE.
00023 { 00024 #if defined (ACE_HAS_DUMP) 00025 ACE_TRACE ("ACE_UPIPE_Connector::dump"); 00026 #endif /* ACE_HAS_DUMP */ 00027 } |
|
Resets any event associations on this handle.
Definition at line 28 of file UPIPE_Connector.inl.
00029 { 00030 // Nothing to do here since the handle is not a socket 00031 return 0; 00032 } |
|
Declare the dynamic allocation hooks.
Definition at line 102 of file UPIPE_Connector.h. |