GNU CommonC++
|
The socket port is an internal class which is attached to and then serviced by a specific SocketService "object". More...
#include <socketport.h>
Public Member Functions | |
void | setTimer (timeout_t timeout=0) |
Derived setTimer to notify the service thread pool of change in expected timeout. More... | |
void | incTimer (timeout_t timeout) |
Derived incTimer to notify the service thread pool of a change in expected timeout. More... | |
![]() | |
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. More... | |
Socket & | operator= (const Socket &from) |
Sockets may also be duplicated by the assignment operator. More... | |
virtual IPV4Host | getIPV4Sender (tpport_t *port=NULL) const |
May be used to examine the origin of data waiting in the socket receive queue. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
Error | setLinger (bool linger) |
Enable lingering sockets on close. More... | |
Error | setKeepAlive (bool enable) |
Set the keep-alive status of this socket and if keep-alive messages will be sent. More... | |
Error | setTypeOfService (Tos service) |
Set packet scheduling on platforms which support ip quality of service conventions. More... | |
bool | isConnected (void) const |
Can test to see if this socket is "connected", and hence whether a "catch" can safely call getPeer(). More... | |
bool | isActive (void) const |
Test to see if the socket is at least operating or if it is mearly initialized. More... | |
bool | operator! () const |
Operator based testing to see if a socket is currently active. More... | |
bool | isBroadcast (void) const |
Return if broadcast has been enabled for the specified socket. More... | |
bool | isRouted (void) const |
Return if socket routing is enabled. More... | |
Error | getErrorNumber (void) const |
Often used by a "catch" to fetch the last error of a thrown socket. More... | |
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. More... | |
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. More... | |
![]() | |
TimerPort () | |
Create a timer, mark it as inactive, and set the initial "start" time to the creation time of the timer object. More... | |
void | setTimer (timeout_t timeout=0) |
Set a new start time for the object based on when this call is made and optionally activate the timer for a specified number of milliseconds. More... | |
void | incTimer (timeout_t timeout) |
Set a timeout based on the current time reference value either from object creation or the last setTimer(). More... | |
void | decTimer (timeout_t timeout) |
Adjust a timeout based on the current time reference value either from object creation or the last setTimer(). More... | |
void | sleepTimer (void) |
Sleep until the current timer expires. More... | |
void | endTimer (void) |
This is used to "disable" the service thread from expiring the timer object. More... | |
timeout_t | getTimer (void) const |
This is used by service threads to determine how much time remains before the timer expires based on a timeout specified in setTimer() or incTimer(). More... | |
timeout_t | getElapsed (void) const |
This is used to determine how much time has elapsed since a timer port setTimer benchmark time was initially set. More... | |
Protected Member Functions | |
SocketPort (SocketService *svc, TCPSocket &tcp) | |
Construct an accepted TCP socket connection from a specific bound TCP server. More... | |
SocketPort (SocketService *svc, TCPV6Socket &tcp) | |
SocketPort (SocketService *svc, const IPV4Address &ia, tpport_t port) | |
Construct a bound UDP socket for use in deriving realtime UDP streaming protocols handled by thread pool objects. More... | |
SocketPort (SocketService *svc, const IPV6Address &ia, tpport_t port) | |
SocketPort (SocketService *svc, const IPV4Host &ih, tpport_t port) | |
A non-blocking constructor for outbound tcp connections. More... | |
SocketPort (SocketService *svc, const IPV6Host &ih, tpport_t port) | |
void | attach (SocketService *svc) |
Attach yourself to the service pool thread object. More... | |
virtual | ~SocketPort () |
Disconnect the socket from the service thread pool and the remote connection. More... | |
void | setDetectPending (bool) |
Used to indicate if the service thread should monitor pending data for us. More... | |
bool | getDetectPending (void) const |
Get the current state of the DetectPending flag. More... | |
void | setDetectOutput (bool) |
Used to indicate if output ready monitoring should be performed by the service thread. More... | |
bool | getDetectOutput (void) const |
Get the current state of the DetectOutput flag. More... | |
virtual void | expired (void) |
Called by the service thread pool when the objects timer has expired. More... | |
virtual void | pending (void) |
Called by the service thread pool when input data is pending for this socket. More... | |
virtual void | output (void) |
Called by the service thread pool when output data is pending for this socket. More... | |
virtual void | disconnect (void) |
Called by the service thread pool when a disconnect has occured. More... | |
Error | connect (const IPV4Address &ia, tpport_t port) |
Connect a Socket Port to a known peer host. More... | |
Error | connect (const IPV6Address &ia, tpport_t port) |
ssize_t | send (const void *buf, size_t len) |
Transmit "send" data to a connected peer host. More... | |
ssize_t | receive (void *buf, size_t len) |
Receive a message from any host. More... | |
ssize_t | peek (void *buf, size_t len) |
Examine the content of the next packet. More... | |
![]() | |
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. More... | |
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. More... | |
void | setError (bool enable) |
This service is used to turn the error handler on or off for "throwing" exceptions by manipulating the thrown flag. More... | |
void | endSocket (void) |
Used as the default destructor for ending a socket. More... | |
Error | connectError (void) |
Used as a common handler for connection failure processing. More... | |
Error | sendLimit (int limit=2048) |
Set the send limit. More... | |
Error | receiveLimit (int limit=1) |
Set thr receive limit. More... | |
Error | sendTimeout (timeout_t timer) |
Set the send timeout for sending raw network data. More... | |
Error | receiveTimeout (timeout_t timer) |
Receive timeout for receiving raw network data. More... | |
Error | sendBuffer (unsigned size) |
Set the protocol stack network kernel send buffer size associated with the socket. More... | |
Error | receiveBuffer (unsigned size) |
Set the protocol stack network kernel receive buffer size associated with the socket. More... | |
Error | bufferSize (unsigned size) |
Set the total protocol stack network kernel buffer size for both send and receive together. More... | |
Error | setBroadcast (bool enable) |
Set the subnet broadcast flag for the socket. More... | |
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. More... | |
Error | setLoopbackByFamily (bool enable, Family family=IPV4) |
Set the multicast loopback flag for the socket. More... | |
Error | setTimeToLiveByFamily (unsigned char ttl, Family fam=IPV4) |
Set the multicast time to live for a multicast socket. More... | |
Error | join (const IPV4Multicast &ia) |
Join a multicast group. More... | |
Error | join (const IPV6Multicast &ia) |
Error | drop (const IPV4Multicast &ia) |
Drop membership from a multicast group. More... | |
Error | drop (const IPV6Multicast &ia) |
Error | setRouting (bool enable) |
Set the socket routing to indicate if outgoing messages should bypass normal routing (set false). More... | |
Error | setNoDelay (bool enable) |
Enable/disable delaying packets (Nagle algorithm) More... | |
Socket (int domain, int type, int protocol=0) | |
An unconnected socket may be created directly on the local machine. More... | |
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. More... | |
Socket () | |
Create an inactive socket object for base constructors. More... | |
Socket (const Socket &source) | |
A socket can also be constructed from an already existing Socket object. More... | |
ssize_t | readLine (char *buf, size_t len, timeout_t timeout=0) |
Process a logical input line from a socket descriptor directly. More... | |
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. More... | |
virtual ssize_t | writeData (const void *buf, size_t len, timeout_t t=0) |
Write a block of len bytes to socket. More... | |
Friends | |
class | SocketService |
The socket port is an internal class which is attached to and then serviced by a specific SocketService "object".
Derived versions of this class offer specific functionality for specific protocols. Both Common C++ supporting frameworks and application objects may be derived from related protocol specific base classes.
A special set of classes, "SocketPort" and "SocketService", exist for building realtime streaming media servers on top of UDP and TCP protocols. The "SocketPort" is used to hold a connected or associated TCP or UDP socket which is being "streamed" and which offers callback methods that are invoked from a "SocketService" thread. SocketService's can be pooled into logical thread pools that can service a group of SocketPorts. A millisecond accurate "timer" is associated with each SocketPort and can be used to time synchronize SocketPort I/O operations.
|
protected |
Construct an accepted TCP socket connection from a specific bound TCP server.
This is meant to derive advanced application specific TCP servers that can be thread pooled.
svc | pool thread object. |
tcp | socket object to accept. |
|
protected |
|
protected |
Construct a bound UDP socket for use in deriving realtime UDP streaming protocols handled by thread pool objects.
svc | pool thread object. |
ia | address of interface to bind. |
port | number to bind to. |
|
protected |
|
protected |
A non-blocking constructor for outbound tcp connections.
To detect when the connection is established, overload SocketPort::output(). SocketPort::output() get's called by the SocketService when the connection is ready, SocketPort::disconnect() when the connect failed. at the moment you should set the socket state to "CONNECTED" when SocketPort::output() get's called for the first time.
svc | pool thread object. |
ih | addess to connect to. |
port | number to connect to. |
|
protected |
|
protectedvirtual |
Disconnect the socket from the service thread pool and the remote connection.
|
protected |
Attach yourself to the service pool thread object.
The later version.
svc | pool thread object |
|
protected |
Connect a Socket Port to a known peer host.
This is normally used with the UDP constructor. This is also performed as a non-blocking operation under Posix systems to prevent delays in a callback handler.
ia | address of remote host or subnet. |
port | number of remote peer(s). |
|
protected |
|
protectedvirtual |
Called by the service thread pool when a disconnect has occured.
|
protectedvirtual |
Called by the service thread pool when the objects timer has expired.
Used for timed events.
|
inlineprotected |
Get the current state of the DetectOutput flag.
|
inlineprotected |
Get the current state of the DetectPending flag.
void ost::SocketPort::incTimer | ( | timeout_t | timeout | ) |
Derived incTimer to notify the service thread pool of a change in expected timeout.
This allows SocketService to reschedule all timers. Otherwise same as TimerPort.
timeout | in milliseconds. |
|
protectedvirtual |
Called by the service thread pool when output data is pending for this socket.
|
inlineprotected |
Examine the content of the next packet.
This can be used to build "smart" line buffering for derived TCP classes.
buf | pointer to packet buffer to examine. |
len | of packet buffer to examine. |
References _IOLEN64.
|
protectedvirtual |
Called by the service thread pool when input data is pending for this socket.
|
inlineprotected |
Receive a message from any host.
This is used in derived classes to build protocols.
buf | pointer to packet buffer to receive. |
len | of packet buffer to receive. |
References _IOLEN64.
|
inlineprotected |
Transmit "send" data to a connected peer host.
This is not public by default since an overriding protocol is likely to be used in a derived class.
buf | address of buffer to send. |
len | of bytes to send. |
References _IOLEN64.
|
protected |
Used to indicate if output ready monitoring should be performed by the service thread.
|
protected |
Used to indicate if the service thread should monitor pending data for us.
void ost::SocketPort::setTimer | ( | timeout_t | timeout = 0 | ) |
Derived setTimer to notify the service thread pool of change in expected timeout.
This allows SocketService to reschedule all timers. Otherwise same as TimerPort.
timeout | in milliseconds. |
|
friend |