Defines the member functions for the ACE_SOCK connected datagram abstraction. More...
#include <SOCK_CODgram.h>
Public Types | |
typedef ACE_INET_Addr | PEER_ADDR |
Public Member Functions | |
ACE_SOCK_CODgram (void) | |
Default constructor. | |
ACE_SOCK_CODgram (const ACE_Addr &remote_sap, const ACE_Addr &local_sap=ACE_Addr::sap_any, int protocol_family=ACE_PROTOCOL_FAMILY_INET, int protocol=0, int reuse_addr=0) | |
~ACE_SOCK_CODgram (void) | |
Default dtor. | |
int | open (const ACE_Addr &remote_sap, const ACE_Addr &local_sap=ACE_Addr::sap_any, int protocol_family=ACE_PROTOCOL_FAMILY_INET, int protocol=0, int reuse_addr=0) |
void | dump (void) const |
Dump the state of an object. | |
Public Attributes | |
ACE_ALLOC_HOOK_DECLARE | |
Declare the dynamic allocation hooks. |
Defines the member functions for the ACE_SOCK connected datagram abstraction.
Definition at line 36 of file SOCK_CODgram.h.
Definition at line 127 of file SOCK_CODgram.h.
ACE_SOCK_CODgram::ACE_SOCK_CODgram | ( | void | ) |
Default constructor.
Definition at line 8 of file SOCK_CODgram.inl.
{ ACE_TRACE ("ACE_SOCK_CODgram::ACE_SOCK_CODgram"); }
ACE_SOCK_CODgram::ACE_SOCK_CODgram | ( | const ACE_Addr & | remote_sap, | |
const ACE_Addr & | local_sap = ACE_Addr::sap_any , |
|||
int | protocol_family = ACE_PROTOCOL_FAMILY_INET , |
|||
int | protocol = 0 , |
|||
int | reuse_addr = 0 | |||
) |
Constructor with addresses specified. Calls open(). This constructor binds and/or connects to a specified address, optionally binding an unused port number.
remote_sap | The remote address. | |
local_sap | The local address. | |
protocol_family | The protocol family for the new socket. If either remote_sap or local_sap is specified (i.e., not ACE_Addr::sap_any) its address type is used instead of this value. If both addresses are specified, their address types must match. If neither address is specified, the platform's default IP address type is used. | |
protocol | Protocol value for the new socket. | |
reuse_addr | Reuse the local address or not. |
There are four possible combinations of remote_sap and local_sap. The behavior in these combinations is:
protocol_family
specifies PF_INET or PF_INET6, bind the local address to a randomly generated port number.Definition at line 27 of file SOCK_CODgram.cpp.
ACE_SOCK_CODgram::~ACE_SOCK_CODgram | ( | void | ) |
Default dtor.
Definition at line 14 of file SOCK_CODgram.inl.
{ ACE_TRACE ("ACE_SOCK_CODgram::~ACE_SOCK_CODgram"); }
void ACE_SOCK_CODgram::dump | ( | void | ) | const |
Dump the state of an object.
Reimplemented from ACE_SOCK_IO.
Definition at line 18 of file SOCK_CODgram.cpp.
{ #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_SOCK_CODgram::dump"); #endif /* ACE_HAS_DUMP */ }
int ACE_SOCK_CODgram::open | ( | const ACE_Addr & | remote_sap, | |
const ACE_Addr & | local_sap = ACE_Addr::sap_any , |
|||
int | protocol_family = ACE_PROTOCOL_FAMILY_INET , |
|||
int | protocol = 0 , |
|||
int | reuse_addr = 0 | |||
) |
Initiate a connected datagram socket, optionally binding an unused port number.
remote_sap | The remote address. | |
local_sap | The local address. | |
protocol_family | The protocol family for the new socket. If either remote_sap or local_sap is specified (i.e., not ACE_Addr::sap_any) its address type is used instead of this value. If both addresses are specified, their address types must match. If neither address is specified, the platform's default IP address type is used. | |
protocol | Protocol value for the new socket. | |
reuse_addr | Reuse the local address or not. |
There are four possible combinations of remote_sap and local_sap. The behavior in these combinations is:
protocol_family
specifies PF_INET or PF_INET6, bind the local address to a randomly generated port number.Definition at line 64 of file SOCK_CODgram.cpp.
{ ACE_TRACE ("ACE_SOCK_CODgram::open"); // Depending on the addresses passed as described above, figure out what // address family to specify for the new socket. If either address is // !ACE_Addr::sap_any, use that family. If they don't match, it's an error. if (remote != ACE_Addr::sap_any) { if (local == ACE_Addr::sap_any) protocol_family = remote.get_type (); else { // Both specified; family must match if (local.get_type () != remote.get_type ()) { errno = EAFNOSUPPORT; return -1; } protocol_family = remote.get_type (); } } else { if (local != ACE_Addr::sap_any) { protocol_family = local.get_type (); } } if (ACE_SOCK::open (SOCK_DGRAM, protocol_family, protocol, reuse_addr) == -1) { return -1; } else { bool error = false; if (local == ACE_Addr::sap_any && remote == ACE_Addr::sap_any) { // Assign an arbitrary port number from the transient range!! if ((protocol_family == PF_INET #if defined (ACE_HAS_IPV6) || protocol_family == PF_INET6 #endif /* ACE_HAS_IPV6 */ ) && ACE::bind_port (this->get_handle ()) == -1) error = true; } // We are binding just the local address. else if (local != ACE_Addr::sap_any && remote == ACE_Addr::sap_any) { if (ACE_OS::bind (this->get_handle (), (sockaddr *) local.get_addr (), local.get_size ()) == -1) error = true; } // We are connecting to the remote address. else if (local == ACE_Addr::sap_any && remote != ACE_Addr::sap_any) { if (ACE_OS::connect (this->get_handle (), (sockaddr *) remote.get_addr (), remote.get_size ()) == -1) error = true; } // We are binding to the local address and connecting to the // remote addresses. else { if (ACE_OS::bind (this->get_handle (), (sockaddr *) local.get_addr (), local.get_size ()) == -1 || ACE_OS::connect (this->get_handle (), (sockaddr *) remote.get_addr (), remote.get_size ()) == -1) error = true; } if (error) { this->close (); this->set_handle (ACE_INVALID_HANDLE); } return error ? -1 : 0; } }
Declare the dynamic allocation hooks.
Reimplemented from ACE_SOCK_IO.
Definition at line 133 of file SOCK_CODgram.h.