summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/main.cpp')
-rw-r--r--daemon/main.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/daemon/main.cpp b/daemon/main.cpp
index d1b0913..bfd36b9 100644
--- a/daemon/main.cpp
+++ b/daemon/main.cpp
@@ -93,7 +93,7 @@ static void handler(int signum) {
93} 93}
94 94
95// Child exit Signal Handler 95// Child exit Signal Handler
96static void child_exit(int signum) { 96static void child_exit(int) {
97 int status; 97 int status;
98 int pid = wait(&status); 98 int pid = wait(&status);
99 if (pid != -1) { 99 if (pid != -1) {
@@ -106,13 +106,18 @@ static void child_exit(int signum) {
106 106
107static int udpPort(int port) { 107static int udpPort(int port) {
108 int s; 108 int s;
109 struct sockaddr_in sockaddr; 109 struct sockaddr_in6 sockaddr;
110 int on; 110 int on;
111 int family = AF_INET6;
111 112
112 s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 113 s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
113 if (s == -1) { 114 if (s == -1) {
114 logg->logError(__FILE__, __LINE__, "socket failed"); 115 family = AF_INET;
115 handleException(); 116 s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
117 if (s == -1) {
118 logg->logError(__FILE__, __LINE__, "socket failed");
119 handleException();
120 }
116 } 121 }
117 122
118 on = 1; 123 on = 1;
@@ -122,9 +127,9 @@ static int udpPort(int port) {
122 } 127 }
123 128
124 memset((void*)&sockaddr, 0, sizeof(sockaddr)); 129 memset((void*)&sockaddr, 0, sizeof(sockaddr));
125 sockaddr.sin_family = AF_INET; 130 sockaddr.sin6_family = family;
126 sockaddr.sin_port = htons(port); 131 sockaddr.sin6_port = htons(port);
127 sockaddr.sin_addr.s_addr = INADDR_ANY; 132 sockaddr.sin6_addr = in6addr_any;
128 if (bind(s, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) { 133 if (bind(s, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) {
129 logg->logError(__FILE__, __LINE__, "socket failed"); 134 logg->logError(__FILE__, __LINE__, "socket failed");
130 handleException(); 135 handleException();
@@ -173,7 +178,7 @@ static void* answerThread(void* pVoid) {
173 178
174 for (;;) { 179 for (;;) {
175 char buf[128]; 180 char buf[128];
176 struct sockaddr_in sockaddr; 181 struct sockaddr_in6 sockaddr;
177 socklen_t addrlen; 182 socklen_t addrlen;
178 int read; 183 int read;
179 addrlen = sizeof(sockaddr); 184 addrlen = sizeof(sockaddr);
@@ -386,7 +391,7 @@ static struct cmdline_t parseCommandLine(int argc, char** argv) {
386} 391}
387 392
388// Gator data flow: collector -> collector fifo -> sender 393// Gator data flow: collector -> collector fifo -> sender
389int main(int argc, char** argv, char* envp[]) { 394int main(int argc, char** argv) {
390 // Ensure proper signal handling by making gatord the process group leader 395 // Ensure proper signal handling by making gatord the process group leader
391 // e.g. it may not be the group leader when launched as 'sudo gatord' 396 // e.g. it may not be the group leader when launched as 'sudo gatord'
392 setsid(); 397 setsid();