summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorJoão Sousa <48479050+joaodasousa@users.noreply.github.com>2020-08-31 00:56:03 +0100
committerGitHub <noreply@github.com>2020-08-31 08:56:03 +0900
commit33fbad18c814e13bd7ba2053525d8959fee437d1 (patch)
tree87d30704e5e78c603aace4cb2c0dacdf3554eba6 /src/shared
parent9af27899553dcfe9cd5ffede7f37be57d1a577a6 (diff)
downloadDLT-daemon-33fbad18c814e13bd7ba2053525d8959fee437d1.tar.gz
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 <joao.sa.sousa@ctw.bmwgroup.com>
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/dlt_common.c15
1 files changed, 14 insertions, 1 deletions
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;