26#include <core/threading/thread.h>
27#include <netcomm/socket/datagram.h>
28#include <netinet/in.h>
29#include <utils/system/signal.h>
37class 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;
88class 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;
170main(
int argc,
char **argv)
172 DatagramSocketQAMain m;
173 SignalManager::register_handler(SIGINT, &m);
174 SignalManager::ignore(SIGPIPE);
Interface for signal handling.
Thread class encapsulation of pthreads.
Fawkes library namespace.