-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathutility.c
68 lines (60 loc) · 2.15 KB
/
utility.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
void signal_bind_wrapper(int signo, void (*func)(int)){
struct sigaction * action = (struct sigaction*)malloc(sizeof(struct sigaction));
action->sa_handler = func;
sigemptyset(&(action->sa_mask));
action->sa_flags = 0;
sigaction(signo, action, NULL);
}
void start_timer(int sec, int usec){
static struct itimerval tim;
tim.it_value.tv_sec = sec;
tim.it_value.tv_usec = usec;
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &tim, NULL);
}
int bind_wrapper(int socket_no, char * ipaddress, int port_no, int reusable){
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr (ipaddress);
serverAddr.sin_port = htons(port_no);
memset(serverAddr.sin_zero,'\0',sizeof(serverAddr.sin_zero));
int yes=1;
if (reusable){
if (setsockopt(socket_no,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes))==-1){
perror("setsockopt");
exit(1);
}
}
return bind(socket_no,(struct sockaddr*) &serverAddr,sizeof(serverAddr));
}
int connect_wrapper(int socket_no, char *ipaddress, int port_no){
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port_no);
serverAddr.sin_addr.s_addr = inet_addr(ipaddress);
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
size_t addr_size = sizeof serverAddr;
if (connect(socket_no, (struct sockaddr *) &serverAddr, addr_size) == -1){
perror("Failed to connect to the server");
exit(2);
}
return 1;
}
size_t send_udp_wrapper(int socket_no, void * data, size_t size, char * ipaddress, int port_no){
struct sockaddr_in server_udp;
server_udp.sin_family = AF_INET;
server_udp.sin_addr.s_addr = inet_addr(ipaddress);
server_udp.sin_port = htons(port_no);
return sendto(socket_no, data, size, 0, (struct sockaddr*)&server_udp, sizeof(struct sockaddr_in));
}