@cryptotaxi247 / netdata-1 / commits / f7378ece2

handle incoming traffic on UDP sockets

Costa Tsaousis (ktsaou) committed Jan 11, 2018 at 10:52 UTC f7378ece2b98d54c7d59ac9a5fb56f86b8a53b0b
1 file changed +17 -10
src/socket.c
+17 -10
@@ -1111,6 +1111,8 @@ void *poll_default_add_callback(POLLINFO *pi, short int *events, void *data) {
1111 (void)events;
1112 (void)data;
1113
1114 + // error("POLLFD: internal error: poll_default_add_callback() called");
1115 +
1116 return NULL;
1117 }
1118
@@ -1120,7 +1122,7 @@ void poll_default_del_callback(POLLINFO *pi) {
1122 }
1123
1124 int poll_default_rcv_callback(POLLINFO *pi, short int *events) {
1123 - (void)events;
1125 + *events |= POLLIN;
1126
1127 char buffer[1024 + 1];
1128
@@ -1130,12 +1132,12 @@ int poll_default_rcv_callback(POLLINFO *pi, short int *events) {
1132 if (rc < 0) {
1133 // read failed
1134 if (errno != EWOULDBLOCK && errno != EAGAIN) {
1133 - error("POLLFD: recv() failed.");
1135 + error("POLLFD: poll_default_rcv_callback(): recv() failed with %zd.", rc);
1136 return -1;
1137 }
1138 } else if (rc) {
1139 // data received
1138 - info("POLLFD: internal error: discarding %zd bytes received on socket %d", rc, pi->fd);
1140 + info("POLLFD: internal error: poll_default_rcv_callback() is discarding %zd bytes received on socket %d", rc, pi->fd);
1141 }
1142 } while (rc != -1);
1143
@@ -1145,7 +1147,7 @@ int poll_default_rcv_callback(POLLINFO *pi, short int *events) {
1147 int poll_default_snd_callback(POLLINFO *pi, short int *events) {
1148 *events &= ~POLLOUT;
1149
1148 - info("POLLFD: internal error: nothing to send on socket %d", pi->fd);
1150 + info("POLLFD: internal error: poll_default_snd_callback(): nothing to send on socket %d", pi->fd);
1151 return 0;
1152 }
1153
@@ -1301,6 +1303,11 @@ void poll_events(LISTEN_SOCKETS *sockets
1303 , SIMPLE_PATTERN *access_list
1304 , void *data
1305 ) {
1306 + if(!sockets || !sockets->opened) {
1307 + error("POLLFD: internal error: no listening sockets are opened");
1308 + return;
1309 + }
1310 +
1311 int retval;
1312
1313 POLLJOB p = {
@@ -1328,10 +1335,10 @@ void poll_events(LISTEN_SOCKETS *sockets
1335 , POLLINFO_FLAG_SERVER_SOCKET
1336 , (sockets->fds_names[i])?sockets->fds_names[i]:"UNKNOWN"
1337 , ""
1331 - , poll_default_add_callback
1332 - , poll_default_del_callback
1333 - , poll_default_rcv_callback
1334 - , poll_default_snd_callback
1338 + , p.add_callback
1339 + , p.del_callback
1340 + , p.rcv_callback
1341 + , p.snd_callback
1342 , NULL
1343 );
1344
@@ -1348,8 +1355,8 @@ void poll_events(LISTEN_SOCKETS *sockets
1355 retval = poll(p.fds, p.max + 1, timeout);
1356
1357 if(unlikely(retval == -1)) {
1351 - error("POLLFD: LISTENER: poll() failed.");
1352 - continue;
1358 + error("POLLFD: LISTENER: poll() failed while waiting on %zu sockets.", p.max + 1);
1359 + break;
1360 }
1361 else if(unlikely(!retval)) {
1362 debug(D_POLLFD, "POLLFD: LISTENER: poll() timeout.");