From 33fbad18c814e13bd7ba2053525d8959fee437d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Sousa?= <48479050+joaodasousa@users.noreply.github.com> Date: Mon, 31 Aug 2020 00:56:03 +0100 Subject: Implement DLTClient for UDP multicast (#240) * Add UDP multicast support on client side UDP multicast support is already present on server side. This patch add seemless support for UDP multicast on client side in dlt-receive. Signed-off-by: Joao Sousa --- src/shared/dlt_common.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/shared') diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c index eb620f5..823bca7 100644 --- a/src/shared/dlt_common.c +++ b/src/shared/dlt_common.c @@ -2014,6 +2014,8 @@ DltReturnValue dlt_receiver_free_unix_socket(DltReceiver *receiver) int dlt_receiver_receive(DltReceiver *receiver, DltReceiverType from_src) { + socklen_t addrlen; + if (receiver == NULL) return -1; @@ -2035,12 +2037,23 @@ int dlt_receiver_receive(DltReceiver *receiver, DltReceiverType from_src) receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - receiver->lastBytesRcvd, 0); - else + else if (from_src == DLT_RECEIVE_FD) /* wait for data from fd */ receiver->bytesRcvd = read(receiver->fd, receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - receiver->lastBytesRcvd); + else { + /* wait for data from UDP socket */ + addrlen = sizeof(receiver->addr); + receiver->bytesRcvd = recvfrom(receiver->fd, + receiver->buf + receiver->lastBytesRcvd, + receiver->buffersize - receiver->lastBytesRcvd, + 0, + (struct sockaddr *)&(receiver->addr), + &addrlen); + } + if (receiver->bytesRcvd <= 0) { receiver->bytesRcvd = 0; -- cgit v1.2.1