26 #include <core/threading/thread.h> 27 #include <netcomm/socket/stream.h> 28 #include <utils/system/argparser.h> 29 #include <utils/system/signal.h> 35 class StreamServerThread :
public Thread 38 StreamServerThread() :
Thread(
"StreamServerThread",
Thread::OPMODE_CONTINUOUS)
50 printf(
"Closing server socket\n");
54 printf(
"Closed server socket\n");
66 printf(
"Server MTU: %u\n", cs->mtu());
73 cs->write(&i,
sizeof(i));
75 cs->read(&ri,
sizeof(ri));
77 printf(
"ERROR: sent %u but received %u\n", i, ri);
79 printf(
"OK: sent %u and received %u\n", i, ri);
84 printf(
"Loop failed, disconnecting and waiting for new connection\n");
99 class StreamClientThread :
public Thread 102 StreamClientThread(
const char *host) :
Thread(
"StreamClientThread",
Thread::OPMODE_CONTINUOUS)
105 this->host =
"127.0.0.1";
114 ~StreamClientThread()
116 printf(
"Closing client socket\n");
118 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));
150 static const unsigned int MODE_STANDALONE = 1;
151 static const unsigned int MODE_SERVER = 2;
152 static const unsigned int MODE_CLIENT = 3;
154 StreamSocketQAMain(
unsigned int mode,
const char *host = NULL)
158 if ((mode == MODE_STANDALONE) || (mode == MODE_SERVER)) {
159 s =
new StreamServerThread();
161 if ((mode == MODE_STANDALONE) || (mode == MODE_CLIENT)) {
162 c =
new StreamClientThread(host);
166 ~StreamSocketQAMain()
173 handle_signal(
int signum)
175 printf(
"Signal received, cancelling threads\n");
180 printf(
"Threads cancelled\n");
197 StreamServerThread *s;
198 StreamClientThread *c;
202 main(
int argc,
char **argv)
204 StreamSocketQAMain *m;
209 if (argp.has_arg(
"s") || argp.has_arg(
"c")) {
211 if (argp.has_arg(
"s")) {
213 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_SERVER);
215 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_CLIENT, argp.arg(
"c"));
218 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.