summaryrefslogtreecommitdiff
path: root/src/shared/dlt_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/dlt_common.c')
-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;