summaryrefslogtreecommitdiffstats
path: root/src/ufo-roof-read-socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ufo-roof-read-socket.c')
-rw-r--r--src/ufo-roof-read-socket.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/ufo-roof-read-socket.c b/src/ufo-roof-read-socket.c
index 7bbe8ef..e8f7ce4 100644
--- a/src/ufo-roof-read-socket.c
+++ b/src/ufo-roof-read-socket.c
@@ -30,6 +30,7 @@ static void ufo_roof_read_socket_free(UfoRoofReadInterface *iface) {
}
static guint ufo_roof_read_socket(UfoRoofReadInterface *iface, uint8_t *buf, GError **error) {
+ int packets;
struct timespec timeout_ts;
UfoRoofReadSocket *reader = (UfoRoofReadSocket*)iface;
@@ -51,11 +52,17 @@ static guint ufo_roof_read_socket(UfoRoofReadInterface *iface, uint8_t *buf, GEr
msg[i].msg_hdr.msg_iovlen = 1;
}
+//retry:
// Timeout seems broken, see BUGS in 'recvmmsg' bugs page
- int packets = recvmmsg(reader->socket, msg, reader->cfg->max_packets, MSG_WAITFORONE, &timeout_ts);
+ packets = recvmmsg(reader->socket, msg, reader->cfg->max_packets, MSG_WAITFORONE, &timeout_ts);
if (packets < 0) roof_network_error_with_retval(error, 0, "recvmmsg failed, error %i", errno);
+/*
// FIXME: Shall we verify packets consistency here? We can check at least the sizes...
+ if ((packets == 1)&&(msg[0].msg_len < 16)) {
+ goto retry;
+ }
+*/
return (guint)packets;
}
@@ -113,6 +120,14 @@ UfoRoofReadInterface *ufo_roof_read_socket_new(UfoRoofConfig *cfg, guint id, GEr
roof_new_error(error, "Error (%i) binding socket (%s) for address (%s) on port (%s)", err, cfg->protocol, addr_str, port_str);
}
+/*
+ // Send ping request to force initialization
+ char msg[4];
+ addr_str = "192.168.34.83";
+ getaddrinfo(addr_str, port_str, &sockaddr_hints, &sockaddr_info);
+ sendto(reader->socket, msg, sizeof(msg), 0, sockaddr_info->ai_addr, sockaddr_info->ai_addrlen);
+*/
+
freeaddrinfo(sockaddr_info);
return (UfoRoofReadInterface*)reader;