26 #include <core/threading/thread.h> 27 #include <netcomm/socket/datagram.h> 28 #include <utils/system/signal.h> 33 #include <netinet/in.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);
58 ~DatagramServerThread()
60 printf(
"Closing server socket\n");
62 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;
89 class DatagramClientThread :
public Thread 92 DatagramClientThread(
unsigned short int port,
unsigned int to_port)
93 :
Thread(
"DatagramClientThread",
Thread::OPMODE_CONTINUOUS)
100 h = gethostbyname(
"127.0.0.1");
102 memset(&to, 0,
sizeof(to));
103 to.sin_family = AF_INET;
104 memcpy((
char *)&to.sin_addr.s_addr, h->h_addr, h->h_length);
105 to.sin_port = htons(to_port);
109 ~DatagramClientThread()
111 printf(
"Closing server socket\n");
113 printf(
"Closed server socket\n");
120 from_len =
sizeof(from);
121 s->recv(&i,
sizeof(i), (
struct sockaddr *)&from, &from_len);
122 s->send(&i,
sizeof(i), (
struct sockaddr *)&to,
sizeof(to));
127 struct sockaddr_in to;
128 struct sockaddr_in from;
129 unsigned int from_len;
136 DatagramSocketQAMain()
138 s =
new DatagramServerThread(1910, 1911);
139 c =
new DatagramClientThread(1911, 1910);
142 ~DatagramSocketQAMain()
149 virtual void handle_signal(
int signum)
151 printf(
"Signal received, cancelling threads\n");
154 printf(
"Threads cancelled\n");
166 DatagramServerThread *s;
167 DatagramClientThread *c;
172 main(
int argc,
char **argv)
174 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.