38 #include <core/threading/thread.h>
39 #include <netcomm/socket/datagram_broadcast.h>
40 #include <netinet/in.h>
41 #include <utils/system/argparser.h>
42 #include <utils/system/signal.h>
48 #define BROADCAST_IP "172.16.35.255"
52 class BroadcastDatagramServerThread :
public Thread
55 BroadcastDatagramServerThread(
unsigned short int port)
56 :
Thread(
"BroadcastDatagramServerThread",
Thread::OPMODE_CONTINUOUS)
68 ~BroadcastDatagramServerThread()
70 printf(
"Closing server socket\n");
72 printf(
"Closed server socket\n");
80 printf(
"Sending %u\n", i);
81 s->send(&i,
sizeof(i));
82 printf(
"Sent %u\n", i);
84 from_len =
sizeof(from);
85 printf(
"Receiving\n");
86 s->recv(&ri,
sizeof(ri), (
struct sockaddr *)&from, &from_len);
88 printf(
"ERROR: sent %u but received %u\n", i, ri);
90 printf(
"OK: sent %u and received %u\n", i, ri);
94 printf(
"Loop failed\n");
103 struct sockaddr_in from;
104 unsigned int from_len;
107 class BroadcastDatagramReflectorThread :
public Thread
110 BroadcastDatagramReflectorThread(
unsigned short int port)
111 :
Thread(
"BroadcastDatagramReflectorThread",
Thread::OPMODE_CONTINUOUS)
120 from_len =
sizeof(from);
123 ~BroadcastDatagramReflectorThread()
125 printf(
"Closing reflector socket\n");
127 printf(
"Closed reflector socket\n");
135 printf(
"Waiting for data to reflect\n");
136 s->recv(&i,
sizeof(i), (
struct sockaddr *)&from, &from_len);
137 printf(
"Received %u, reflecting\n", i);
138 s->send(&i,
sizeof(i));
143 struct sockaddr_in from;
144 unsigned int from_len;
155 printf(
"Going to be a reflector\n");
156 r =
new BroadcastDatagramReflectorThread(1910);
158 s =
new BroadcastDatagramServerThread(1910);
162 ~BroadcastDatagramSocketQAMain()
169 handle_signal(
int signum)
171 printf(
"Signal received, cancelling threads\n");
176 printf(
"Threads cancelled\n");
193 BroadcastDatagramServerThread * s;
194 BroadcastDatagramReflectorThread *r;
198 main(
int argc,
char **argv)
200 printf(
"Going to broadcast to " BROADCAST_IP
"\n");
202 BroadcastDatagramSocketQAMain m(argp);
Parse command line arguments.
bool has_arg(const char *argn)
Check if argument has been supplied.
Broadcast datagram socket.
Base class for exceptions in Fawkes.
void print_trace() noexcept
Prints trace to stderr.
Interface for signal handling.
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
Thread class encapsulation of pthreads.
Fawkes library namespace.