39 #include <core/threading/thread.h> 40 #include <netcomm/socket/datagram_broadcast.h> 41 #include <utils/system/signal.h> 42 #include <utils/system/argparser.h> 47 #include <netinet/in.h> 49 #define BROADCAST_IP "172.16.35.255" 53 class BroadcastDatagramServerThread :
public Thread 56 BroadcastDatagramServerThread(
unsigned short int port)
57 :
Thread(
"BroadcastDatagramServerThread",
Thread::OPMODE_CONTINUOUS)
69 ~BroadcastDatagramServerThread()
71 printf(
"Closing server socket\n");
73 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");
134 printf(
"Waiting for data to reflect\n");
135 s->recv(&i,
sizeof(i), (
struct sockaddr *)&from, &from_len);
136 printf(
"Received %u, reflecting\n", i);
137 s->send(&i,
sizeof(i));
142 struct sockaddr_in from;
143 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 virtual void handle_signal(
int signum)
171 printf(
"Signal received, cancelling threads\n");
172 if ( s != NULL ) s->cancel();
173 if ( r != NULL ) r->cancel();
174 printf(
"Threads cancelled\n");
190 BroadcastDatagramServerThread *s;
191 BroadcastDatagramReflectorThread *r;
196 main(
int argc,
char **argv)
198 printf(
"Going to broadcast to " BROADCAST_IP
"\n");
200 BroadcastDatagramSocketQAMain m(argp);
Fawkes library namespace.
Interface for signal handling.
Parse command line arguments.
Thread class encapsulation of pthreads.
Base class for exceptions in Fawkes.
Broadcast datagram socket.
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.
bool has_arg(const char *argn)
Check if argument has been supplied.