26 #include <core/threading/thread.h> 27 #include <netcomm/socket/stream.h> 28 #include <utils/system/signal.h> 29 #include <utils/system/argparser.h> 35 class StreamServerThread :
public Thread 39 :
Thread(
"StreamServerThread",
Thread::OPMODE_CONTINUOUS)
51 printf(
"Closing server socket\n");
54 printf(
"Closed server socket\n");
65 printf(
"Server MTU: %u\n", cs->mtu());
72 cs->write(&i,
sizeof(i));
74 cs->read(&ri,
sizeof(ri));
76 printf(
"ERROR: sent %u but received %u\n", i, ri);
78 printf(
"OK: sent %u and received %u\n", i, ri);
83 printf(
"Loop failed, disconnecting and waiting for new connection\n");
99 class StreamClientThread :
public Thread 102 StreamClientThread(
const char *host)
103 :
Thread(
"StreamClientThread",
Thread::OPMODE_CONTINUOUS)
105 if ( host == NULL ) {
106 this->host =
"127.0.0.1";
115 ~StreamClientThread()
117 printf(
"Closing client socket\n");
119 printf(
"Closed client socket\n");
127 s->connect(host, 1910);
129 printf(
"Client MTU: %u\n", s->mtu());
136 s->read(&i,
sizeof(i));
137 s->write(&i,
sizeof(i));
151 static const unsigned int MODE_STANDALONE = 1;
152 static const unsigned int MODE_SERVER = 2;
153 static const unsigned int MODE_CLIENT = 3;
155 StreamSocketQAMain(
unsigned int mode,
const char *host = NULL)
159 if ( (mode == MODE_STANDALONE) ||
160 (mode == MODE_SERVER) ) {
161 s =
new StreamServerThread();
163 if ( (mode == MODE_STANDALONE) ||
164 (mode == MODE_CLIENT) ) {
165 c =
new StreamClientThread(host);
169 ~StreamSocketQAMain()
176 virtual void handle_signal(
int signum)
178 printf(
"Signal received, cancelling threads\n");
181 printf(
"Threads cancelled\n");
193 StreamServerThread *s;
194 StreamClientThread *c;
199 main(
int argc,
char **argv)
201 StreamSocketQAMain *m;
206 if ( argp.has_arg(
"s") || argp.has_arg(
"c") ) {
208 if ( argp.has_arg(
"s") ) {
210 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_SERVER);
212 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_CLIENT,
216 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_STANDALONE);
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers...
Fawkes library namespace.
Interface for signal handling.
Parse command line arguments.
Thread class encapsulation of pthreads.
TCP stream socket over IP.
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
void print_trace()
Prints trace to stderr.