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);
Parse command line arguments.
void print_trace() noexcept
Prints trace to stderr.
Interface for signal handling.
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers,...
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
TCP stream socket over IP.
Thread class encapsulation of pthreads.
Fawkes library namespace.