26 #include <core/threading/thread.h> 27 #include <netcomm/socket/datagram.h> 28 #include <netinet/in.h> 29 #include <utils/system/signal.h> 37 class DatagramServerThread :
public Thread 40 DatagramServerThread(
unsigned short int port,
unsigned int to_port)
41 :
Thread(
"DatagramServerThread",
Thread::OPMODE_CONTINUOUS)
49 h = gethostbyname(
"127.0.0.1");
51 memset(&to, 0,
sizeof(to));
52 to.sin_family = AF_INET;
53 memcpy((
char *)&to.sin_addr.s_addr, h->h_addr, h->h_length);
54 to.sin_port = htons(to_port);
57 ~DatagramServerThread()
59 printf(
"Closing server socket\n");
61 printf(
"Closed server socket\n");
68 s->send(&i,
sizeof(i), (
struct sockaddr *)&to,
sizeof(to));
70 from_len =
sizeof(from);
71 s->recv(&ri,
sizeof(ri), (
struct sockaddr *)&from, &from_len);
73 printf(
"ERROR: sent %u but received %u\n", i, ri);
75 printf(
"OK: sent %u and received %u\n", i, ri);
83 struct sockaddr_in to;
84 struct sockaddr_in from;
85 unsigned int from_len;
88 class DatagramClientThread :
public Thread 91 DatagramClientThread(
unsigned short int port,
unsigned int to_port)
92 :
Thread(
"DatagramClientThread",
Thread::OPMODE_CONTINUOUS)
99 h = gethostbyname(
"127.0.0.1");
101 memset(&to, 0,
sizeof(to));
102 to.sin_family = AF_INET;
103 memcpy((
char *)&to.sin_addr.s_addr, h->h_addr, h->h_length);
104 to.sin_port = htons(to_port);
107 ~DatagramClientThread()
109 printf(
"Closing server socket\n");
111 printf(
"Closed server socket\n");
119 from_len =
sizeof(from);
120 s->recv(&i,
sizeof(i), (
struct sockaddr *)&from, &from_len);
121 s->send(&i,
sizeof(i), (
struct sockaddr *)&to,
sizeof(to));
126 struct sockaddr_in to;
127 struct sockaddr_in from;
128 unsigned int from_len;
134 DatagramSocketQAMain()
136 s =
new DatagramServerThread(1910, 1911);
137 c =
new DatagramClientThread(1911, 1910);
140 ~DatagramSocketQAMain()
147 handle_signal(
int signum)
149 printf(
"Signal received, cancelling threads\n");
152 printf(
"Threads cancelled\n");
165 DatagramServerThread *s;
166 DatagramClientThread *c;
170 main(
int argc,
char **argv)
172 DatagramSocketQAMain m;
Fawkes library namespace.
Interface for signal handling.
Thread class encapsulation of pthreads.
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.