GNU CommonC++
|
The Unix domain session is used to primarily to represent a client connection that can be managed on a seperate thread. More...
#include <unix.h>
Public Member Functions | |
UnixSession (const char *pathname, int size=512, int pri=0, int stack=0) | |
Create a Unix domain socket that will be connected to a local server server and that will execute under it's own thread. | |
UnixSession (UnixSocket &server, int size=512, int pri=0, int stack=0) | |
Create a Unix domain socket from a bound Unix domain server by accepting a pending connection from that server and execute a thread for the accepted connection. | |
virtual | ~UnixSession () |
Virtual destructor. | |
![]() | |
Thread (bool isMain) | |
This is actually a special constructor that is used to create a thread "object" for the current execution context when that context is not created via an instance of a derived Thread object itself. | |
Thread (int pri=0, size_t stack=0) | |
When a thread object is contructed, a new thread of execution context is created. | |
Thread (const Thread &th) | |
A thread of execution can also be specified by cloning an existing thread. | |
virtual | ~Thread () |
The thread destructor should clear up any resources that have been allocated by the thread. | |
int | start (Semaphore *start=0) |
When a new thread is created, it does not begin immediate execution. | |
int | detach (Semaphore *start=0) |
Start a new thread as "detached". | |
Thread * | getParent (void) |
Gets the pointer to the Thread class which created the current thread object. | |
void | suspend (void) |
Suspends execution of the selected thread. | |
void | resume (void) |
Resumes execution of the selected thread. | |
Cancel | getCancel (void) |
Used to retrieve the cancellation mode in effect for the selected thread. | |
bool | isRunning (void) const |
Verifies if the thread is still running or has already been terminated but not yet deleted. | |
bool | isDetached (void) const |
Check if this thread is detached. | |
void | join (void) |
Blocking call which unlocks when thread terminates. | |
bool | isThread (void) const |
Tests to see if the current execution context is the same as the specified thread object. | |
cctid_t | getId (void) const |
Get system thread numeric identifier. | |
const char * | getName (void) const |
Get the name string for this thread, to use in debug messages. | |
![]() | |
UnixStream (UnixSocket &server, int size=512, bool throwflag=true, timeout_t timeout=0) | |
Create a Unix domain stream by accepting a connection from a bound Unix domain socket acting as a server. | |
UnixStream (const char *pathname, int size=512, bool throwflag=true, timeout_t to=0) | |
Create a Unix domain stream by connecting to a Unix domain socket. | |
void | setTimeout (timeout_t to) |
Set the I/O operation timeout for socket I/O operations. | |
UnixStream (const UnixStream &source) | |
A copy constructor creates a new stream buffer. | |
virtual | ~UnixStream () |
Flush and empty all buffers, and then remove the allocated buffers. | |
int | sync (void) |
Flushes the stream input and output buffers, writes pending output. | |
bool | isPending (Pending pend, timeout_t timeout=TIMEOUT_INF) |
Get the status of pending stream data. | |
int | getBufferSize (void) const |
Return the size of the current stream buffering used. | |
![]() | |
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. | |
Protected Member Functions | |
int | waitConnection (timeout_t timeout=TIMEOUT_INF) |
Normally called during the thread Initial() method by default, this will wait for the socket connection to complete when connecting to a remote socket. | |
void | initial (void) |
The initial method is used to esablish a connection when delayed completion is used. | |
![]() | |
void | setName (const char *text) |
Set the name of the current thread. | |
virtual void | run (void)=0 |
All threads execute by deriving the Run method of Thread. | |
virtual void | final (void) |
A thread that is self terminating, either by invoking exit() or leaving it's run(), will have this method called. | |
virtual void | initial (void) |
The initial method is called by a newly created thread when it starts execution. | |
virtual void * | getExtended (void) |
Since getParent() and getThread() only refer to an object of the Thread "base" type, this virtual method can be replaced in a derived class with something that returns data specific to the derived class that can still be accessed through the pointer returned by getParent() and getThread(). | |
virtual void | notify (Thread *) |
When a thread terminates, it now sends a notification message to the parent thread which created it. | |
void | exit (void) |
Used to properly exit from a Thread derived run() or initial() method. | |
void | sync (void) |
Used to wait for a join or cancel, in place of explicit exit. | |
bool | testCancel (void) |
test a cancellation point for deferred thread cancellation. | |
void | setCancel (Cancel mode) |
Sets thread cancellation mode. | |
void | setSuspend (Suspend mode) |
Sets the thread's ability to be suspended from execution. | |
void | terminate (void) |
Used by another thread to terminate the current thread. | |
void | clrParent (void) |
clear parent thread relationship. | |
![]() | |
UnixStream (bool throwflag=true) | |
The constructor required for "unixstream", a more C++ style version of the TCPStream class. | |
void | allocate (int size) |
Used to allocate the buffer space needed for iostream operations. | |
void | endStream (void) |
Used to terminate the buffer space and cleanup the socket connection. | |
virtual int | underflow (void) |
This streambuf method is used to load the input buffer through the established unix domain socket connection. | |
int | uflow (void) |
This streambuf method is used for doing unbuffered reads through the established unix domain socket connection when in interactive mode. | |
int | overflow (int ch) |
This streambuf method is used to write the output buffer through the established unix domain connection. | |
void | connect (const char *pathname, int size) |
Create a Unix domain stream by connecting to a Unix domain socket. | |
std::iostream * | unixstr (void) |
Used in derived classes to refer to the current object via it's iostream. | |
![]() | |
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. | |
Additional Inherited Members | ||
![]() | ||
enum | Throw { throwNothing , throwObject , throwException } | |
How to raise error. More... | ||
enum | Cancel { cancelInitial =0 , cancelDeferred =1 , cancelImmediate , cancelDisabled , cancelManual , cancelDefault =cancelDeferred } | |
How work cancellation. More... | ||
enum | Suspend { suspendEnable , suspendDisable } | |
How work suspend. More... | ||
typedef enum ost::Thread::Throw | Throw | |
How to raise error. | ||
typedef enum ost::Thread::Cancel | Cancel | |
How work cancellation. | ||
typedef enum ost::Thread::Suspend | Suspend | |
How work suspend. | ||
![]() | ||
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 | |
![]() | ||
static Thread * | get (void) | |
static void | setStack (size_t size=0) | |
Set base stack limit before manual stack sizes have effect. | ||
static void | sleep (timeout_t msec) | |
A thread-safe sleep call. | ||
static void | yield (void) | |
Yields the current thread's CPU time slice to allow another thread to begin immediate execution. | ||
static Throw | getException (void) | |
Get exception mode of the current thread. | ||
static void | setException (Throw mode) | |
Set exception mode of the current thread. | ||
static Cancel | enterCancel (void) | |
This is used to help build wrapper functions in libraries around system calls that should behave as cancellation points but don't. | ||
static void | exitCancel (Cancel cancel) | |
This is used to restore a cancel block. | ||
![]() | ||
static bool | check (Family fam) | |
See if a specific protocol family is available in the current runtime environment. | ||
![]() | ||
enum | State { INITIAL , AVAILABLE , BOUND , CONNECTED , CONNECTING , STREAM } | |
typedef enum State | State | |
![]() | ||
timeout_t | timeout | |
int | bufsize | |
char * | gbuf | |
char * | pbuf | |
![]() | ||
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 | |
The Unix domain session is used to primarily to represent a client connection that can be managed on a seperate thread.
The Unix domain session also supports a non-blocking connection scheme which prevents blocking during the constructor and moving the process of completing a connection into the thread that executes for the session.
Threaded streamable unix domain socket with non-blocking constructor.
ost::UnixSession::UnixSession | ( | const char * | pathname, |
int | size = 512 , |
||
int | pri = 0 , |
||
int | stack = 0 |
||
) |
Create a Unix domain socket that will be connected to a local server server and that will execute under it's own thread.
pathname | path to socket |
size | of streaming buffer. |
pri | execution priority relative to parent. |
stack | allocation needed on some platforms. |
ost::UnixSession::UnixSession | ( | UnixSocket & | server, |
int | size = 512 , |
||
int | pri = 0 , |
||
int | stack = 0 |
||
) |
Create a Unix domain socket from a bound Unix domain server by accepting a pending connection from that server and execute a thread for the accepted connection.
server | unix domain socket to accept a connection from. |
size | of streaming buffer. |
pri | execution priority relative to parent. |
stack | allocation needed on some platforms. |
|
virtual |
Virtual destructor.
|
protectedvirtual |
The initial method is used to esablish a connection when delayed completion is used.
This assures the constructor terminates without having to wait for a connection request to complete.
Reimplemented from ost::Thread.
|
protected |
Normally called during the thread Initial() method by default, this will wait for the socket connection to complete when connecting to a remote socket.
One might wish to use setCompletion() to change the socket back to blocking I/O calls after the connection completes. To implement the session one must create a derived class which implements Run().
timeout | to wait for completion in milliseconds. |