GNU CommonC++
|
UDP duplex connections impliment a bi-directional point-to-point UDP session between two peer hosts. More...
#include <socket.h>
Public Member Functions | |
UDPDuplex (const IPV4Address &bind, tpport_t port) | |
Create a UDP duplex as a pair of UDP simplex objects bound to alternating and interconnected port addresses. | |
UDPDuplex (const IPV6Address &bind, tpport_t port) | |
Error | connect (const IPV4Host &host, tpport_t port) |
Associate the duplex with a specified peer host. | |
Error | connect (const IPV6Host &host, tpport_t port) |
Error | disconnect (void) |
Disassociate this duplex from any host connection. | |
![]() | |
ssize_t | transmit (const char *buffer, size_t len) |
Transmit "send" to use "connected" send rather than sendto. | |
bool | isOutputReady (unsigned long timeout=0l) |
See if output queue is empty for sending more packets. | |
Error | setRouting (bool enable) |
Error | setTypeOfService (Tos tos) |
Error | setBroadcast (bool enable) |
![]() | |
ssize_t | receive (void *buf, size_t len) |
Receive a data packet from the connected peer host. | |
bool | isInputReady (timeout_t timeout=TIMEOUT_INF) |
See if input queue has data packets available. | |
Additional Inherited Members | ||
![]() | ||
enum | State { INITIAL , AVAILABLE , BOUND , CONNECTED , CONNECTING , STREAM } | |
typedef enum State | State | |
enum | Family { IPV6 = AF_INET6 , IPV4 = AF_INET } | |
enum | Error { errSuccess = 0 , errCreateFailed , errCopyFailed , errInput , errInputInterrupt , errResourceFailure , errOutput , errOutputInterrupt , errNotConnected , errConnectRefused , errConnectRejected , errConnectTimeout , errConnectFailed , errConnectInvalid , errConnectBusy , errConnectNoRoute , errBindingFailed , errBroadcastDenied , errRoutingDenied , errKeepaliveDenied , errServiceDenied , errServiceUnavailable , errMulticastDisabled , errTimeout , errNoDelay , errExtended , errLookupFail , errSearchErr , errInvalidValue } | |
enum | Tos { tosLowDelay = 0 , tosThroughput , tosReliability , tosMinCost , tosInvalid } | |
enum | Pending { pendingInput , pendingOutput , pendingError } | |
typedef enum Family | Family | |
typedef enum Error | Error | |
typedef enum Tos | Tos | |
typedef enum Pending | Pending | |
![]() | ||
UDPTransmit (Family family=IPV4) | ||
Create a UDP transmitter. | ||
UDPTransmit (const IPV4Address &bind, tpport_t port=5005) | ||
Create a UDP transmitter, bind it to a specific interface and port address so that other UDP sockets on remote machines (or the same host) may find and send UDP messages to it, and associate it with a given port on a peer host. | ||
UDPTransmit (const IPV6Address &bind, tpport_t port=5005) | ||
Error | connect (const IPV4Host &host, tpport_t port) | |
Associate this socket with a specified peer host. | ||
Error | connect (const IPV6Address &host, tpport_t port) | |
Error | connect (const IPV4Broadcast &subnet, tpport_t port) | |
Associate this socket with a subnet of peer hosts for subnet broadcasting. | ||
Error | connect (const IPV4Multicast &mgroup, tpport_t port) | |
Associate this socket with a multicast group. | ||
Error | connect (const IPV6Multicast &mgroup, tpport_t port) | |
ssize_t | send (const void *buf, size_t len) | |
Transmit "send" to use "connected" send rather than sendto. | ||
void | endTransmitter (void) | |
Stop transmitter. | ||
SOCKET | getTransmitter (void) | |
Error | setMulticast (bool enable) | |
Error | setTimeToLive (unsigned char ttl) | |
![]() | ||
UDPSocket (Family family=IPV4) | ||
Create an unbound UDP socket, mostly for internal use. | ||
UDPSocket (const char *name, Family family=IPV4) | ||
Create a UDP socket bound by a service name. | ||
UDPSocket (const IPV4Address &bind, tpport_t port) | ||
Create a UDP socket and bind it to a specific interface and port address so that other UDP sockets on remote machines (or the same host) may find and send UDP messages to it. | ||
UDPSocket (const IPV6Address &bind, tpport_t port) | ||
virtual | ~UDPSocket () | |
Destroy a UDP socket as a socket. | ||
Error | setLoopback (bool enable) | |
Set the loopback. | ||
Error | setMulticast (bool enable) | |
Set the multicast. | ||
Error | setTimeToLive (char ttl) | |
Set time to live. | ||
void | setPeer (const IPV4Host &host, tpport_t port) | |
set the peer address to send message packets to. | ||
void | connect (const IPV4Host &host, tpport_t port) | |
void | setPeer (const IPV6Host &host, tpport_t port) | |
void | connect (const IPV6Host &host, tpport_t port) | |
Socket::Error | getInterfaceIndex (const char *ethX, int &InterfaceIndex) | |
get the interface index for a named network device | ||
Socket::Error | join (const IPV4Multicast &ia, int InterfaceIndex) | |
join a multicast group on a particular interface | ||
ssize_t | send (const void *buf, size_t len) | |
Send a message packet to a peer host. | ||
ssize_t | receive (void *buf, size_t len, bool reply=false) | |
Receive a message from any host. | ||
IPV4Host | getIPV4Peer (tpport_t *port=NULL) const | |
Examine address of sender of next waiting packet. | ||
IPV4Host | getPeer (tpport_t *port=NULL) const | |
IPV6Host | getIPV6Peer (tpport_t *port=NULL) const | |
ssize_t | peek (void *buf, size_t len) | |
Examine contents of next waiting packet. | ||
void | setPeer (const char *service) | |
Associate socket with a named connection. | ||
void | connect (const char *service) | |
Error | disconnect (void) | |
Disassociate this socket from any host connection. | ||
![]() | ||
Error | error (Error error, const char *err=NULL, long systemError=0) const | |
This service is used to throw all socket errors which usually occur during the socket constructor. | ||
void | error (const char *err) const | |
This service is used to throw application defined socket errors where the application specific error code is a string. | ||
void | setError (bool enable) | |
This service is used to turn the error handler on or off for "throwing" exceptions by manipulating the thrown flag. | ||
void | endSocket (void) | |
Used as the default destructor for ending a socket. | ||
Error | connectError (void) | |
Used as a common handler for connection failure processing. | ||
Error | sendLimit (int limit=2048) | |
Set the send limit. | ||
Error | receiveLimit (int limit=1) | |
Set thr receive limit. | ||
Error | sendTimeout (timeout_t timer) | |
Set the send timeout for sending raw network data. | ||
Error | receiveTimeout (timeout_t timer) | |
Receive timeout for receiving raw network data. | ||
Error | sendBuffer (unsigned size) | |
Set the protocol stack network kernel send buffer size associated with the socket. | ||
Error | receiveBuffer (unsigned size) | |
Set the protocol stack network kernel receive buffer size associated with the socket. | ||
Error | bufferSize (unsigned size) | |
Set the total protocol stack network kernel buffer size for both send and receive together. | ||
Error | setBroadcast (bool enable) | |
Set the subnet broadcast flag for the socket. | ||
Error | setMulticastByFamily (bool enable, Family family=IPV4) | |
Setting multicast binds the multicast interface used for the socket to the interface the socket itself has been implicitly bound to. | ||
Error | setLoopbackByFamily (bool enable, Family family=IPV4) | |
Set the multicast loopback flag for the socket. | ||
Error | setTimeToLiveByFamily (unsigned char ttl, Family fam=IPV4) | |
Set the multicast time to live for a multicast socket. | ||
Error | join (const IPV4Multicast &ia) | |
Join a multicast group. | ||
Error | join (const IPV6Multicast &ia) | |
Error | drop (const IPV4Multicast &ia) | |
Drop membership from a multicast group. | ||
Error | drop (const IPV6Multicast &ia) | |
Error | setRouting (bool enable) | |
Set the socket routing to indicate if outgoing messages should bypass normal routing (set false). | ||
Error | setNoDelay (bool enable) | |
Enable/disable delaying packets (Nagle algorithm) | ||
Socket (int domain, int type, int protocol=0) | ||
An unconnected socket may be created directly on the local machine. | ||
Socket (SOCKET fd) | ||
A socket object may be created from a file descriptor when that descriptor was created either through a socket() or accept() call. | ||
Socket () | ||
Create an inactive socket object for base constructors. | ||
Socket (const Socket &source) | ||
A socket can also be constructed from an already existing Socket object. | ||
ssize_t | readLine (char *buf, size_t len, timeout_t timeout=0) | |
Process a logical input line from a socket descriptor directly. | ||
virtual ssize_t | readData (void *buf, size_t len, char separator=0, timeout_t t=0) | |
Read in a block of len bytes with specific separator. | ||
virtual ssize_t | writeData (const void *buf, size_t len, timeout_t t=0) | |
Write a block of len bytes to socket. | ||
virtual | ~Socket () | |
The socket base class may be "thrown" as a result of an error, and the "catcher" may then choose to destroy the object. | ||
Socket & | operator= (const Socket &from) | |
Sockets may also be duplicated by the assignment operator. | ||
virtual IPV4Host | getIPV4Sender (tpport_t *port=NULL) const | |
May be used to examine the origin of data waiting in the socket receive queue. | ||
IPV4Host | getSender (tpport_t *port=NULL) const | |
virtual IPV6Host | getIPV6Sender (tpport_t *port=NULL) const | |
IPV4Host | getIPV4Peer (tpport_t *port=NULL) const | |
Get the host address and port of the socket this socket is connected to. | ||
IPV4Host | getPeer (tpport_t *port=NULL) const | |
IPV6Host | getIPV6Peer (tpport_t *port=NULL) const | |
IPV4Host | getIPV4Local (tpport_t *port=NULL) const | |
Get the local address and port number this socket is currently bound to. | ||
IPV4Host | getLocal (tpport_t *port=NULL) const | |
IPV6Host | getIPV6Local (tpport_t *port=NULL) const | |
IPV4Host | getIPV4NAT (tpport_t *port=NULL) const | |
Perform NAT table lookup for this socket. | ||
IPV4Host | getNAT (tpport_t *port) const | |
IPV6Host | getIPV6NAT (tpport_t *port=NULL) const | |
void | setCompletion (bool immediate) | |
Used to specify blocking mode for the socket. | ||
Error | setLinger (bool linger) | |
Enable lingering sockets on close. | ||
Error | setKeepAlive (bool enable) | |
Set the keep-alive status of this socket and if keep-alive messages will be sent. | ||
Error | setTypeOfService (Tos service) | |
Set packet scheduling on platforms which support ip quality of service conventions. | ||
bool | isConnected (void) const | |
Can test to see if this socket is "connected", and hence whether a "catch" can safely call getPeer(). | ||
bool | isActive (void) const | |
Test to see if the socket is at least operating or if it is mearly initialized. | ||
bool | operator! () const | |
Operator based testing to see if a socket is currently active. | ||
bool | isBroadcast (void) const | |
Return if broadcast has been enabled for the specified socket. | ||
bool | isRouted (void) const | |
Return if socket routing is enabled. | ||
Error | getErrorNumber (void) const | |
Often used by a "catch" to fetch the last error of a thrown socket. | ||
const char * | getErrorString (void) const | |
Often used by a "catch" to fetch the user set error string of a thrown socket, but only if EXTENDED error codes are used. | ||
long | getSystemError (void) const | |
const char * | getSystemErrorString (void) const | |
virtual bool | isPending (Pending pend, timeout_t timeout=TIMEOUT_INF) | |
Get the status of pending operations. | ||
![]() | ||
UDPReceive (const IPV4Address &bind, tpport_t port) | ||
Create a UDP receiver, bind it to a specific interface and port address so that other UDP sockets on remote machines (or the same host) may find and send UDP messages to it, and associate it with a given port on a peer host. | ||
UDPReceive (const IPV6Address &bind, tpport_t port) | ||
Error | connect (const IPV4Host &host, tpport_t port) | |
Associate this socket with a specified peer host. | ||
Error | connect (const IPV6Host &host, tpport_t port) | |
bool | isPendingReceive (timeout_t timeout) | |
Check for pending data. | ||
void | endReceiver (void) | |
End receiver. | ||
SOCKET | getReceiver (void) const | |
Error | setRouting (bool enable) | |
Error | setMulticast (bool enable) | |
Error | join (const IPV4Multicast &ia) | |
Error | join (const IPV6Multicast &ia) | |
Error | drop (const IPV4Multicast &ia) | |
Error | drop (const IPV6Multicast &ia) | |
![]() | ||
static bool | check (Family fam) | |
See if a specific protocol family is available in the current runtime environment. | ||
![]() | ||
union { | ||
struct sockaddr_in6 ipv6 | ||
struct sockaddr_in ipv4 | ||
} | peer | |
Family | family | |
![]() | ||
struct { | ||
bool thrown: 1 | ||
bool broadcast: 1 | ||
bool route: 1 | ||
bool keepalive: 1 | ||
bool loopback: 1 | ||
bool multicast: 1 | ||
bool completion: 1 | ||
bool linger: 1 | ||
unsigned ttl: 8 | ||
} | flags | |
SOCKET volatile | so | |
the actual socket descriptor, in Windows, unlike posix it cannot be used as an file descriptor that way madness lies – jfc | ||
State volatile | state | |
![]() | ||
static Mutex | mutex | |
UDP duplex connections impliment a bi-directional point-to-point UDP session between two peer hosts.
Two UDP sockets are typically used on alternating port addresses to assure that sender and receiver data does not collide or echo back. A UDP Duplex is commonly used for full duplex real-time streaming of UDP data between hosts.
Unreliable Datagram Peer Associations.
ost::UDPDuplex::UDPDuplex | ( | const IPV4Address & | bind, |
tpport_t | port | ||
) |
Create a UDP duplex as a pair of UDP simplex objects bound to alternating and interconnected port addresses.
bind | address to bind this socket to. |
port | number to bind sender. |
ost::UDPDuplex::UDPDuplex | ( | const IPV6Address & | bind, |
tpport_t | port | ||
) |
Associate the duplex with a specified peer host.
Both the sender and receiver will be interconnected with the remote host.
host | address to connect socket to. |
port | number to connect socket to. |
Error ost::UDPDuplex::disconnect | ( | void | ) |
Disassociate this duplex from any host connection.
No data should be read or written until a connection is established.