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()
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.