Configurable Timeout on send.
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Fri, 29 Nov 2013 11:21:24 +0000 (12:21 +0100)
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Fri, 10 Jan 2014 06:15:45 +0000 (07:15 +0100)
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
src/daemon/dlt-daemon.c
src/daemon/dlt-daemon.h
src/daemon/dlt.conf

index 47c395f..335e3e4 100644 (file)
@@ -221,6 +221,7 @@ int option_file_parser(DltDaemonLocal *daemon_local)
        daemon_local->flags.loggingMode = 0;
        daemon_local->flags.loggingLevel = 6;
        strncpy(daemon_local->flags.loggingFilename, DLT_USER_DIR "/dlt.log",sizeof(daemon_local->flags.loggingFilename));
+       daemon_local->timeoutOnSend = 4;
        daemon_local->flags.sendECUSoftwareVersion = 0;
        memset(daemon_local->flags.pathToECUSoftwareVersion, 0, sizeof(daemon_local->flags.pathToECUSoftwareVersion));
 
@@ -344,6 +345,11 @@ int option_file_parser(DltDaemonLocal *daemon_local)
                                                         strncpy(daemon_local->flags.loggingFilename,value,sizeof(daemon_local->flags.loggingFilename) - 1);
                                                        //printf("Option: %s=%s\n",token,value);
                                                }
+                               else if(strcmp(token,"TimeOutOnSend")==0)
+                                               {
+                                                       daemon_local->timeoutOnSend = atoi(value);
+                                                       //printf("Option: %s=%s\n",token,value);
+                                               }
                                                else if(strcmp(token,"SharedMemorySize")==0)
                                                {
                                                        daemon_local->flags.sharedMemorySize = atoi(value);
@@ -1199,6 +1205,13 @@ int dlt_daemon_process_client_connect(DltDaemon *daemon, DltDaemonLocal *daemon_
     dlt_daemon_applications_invalidate_fd(daemon,in_sock,verbose);
     dlt_daemon_contexts_invalidate_fd(daemon,in_sock,verbose);
 
+    /* Set socket timeout in reception */
+    struct timeval timeout_send;
+    timeout_send.tv_sec = daemon_local->timeoutOnSend;
+    timeout_send.tv_usec = 0;
+    if (setsockopt (in_sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout_send, sizeof(timeout_send)) < 0)
+        dlt_log(LOG_ERR, "setsockopt failed\n");
+
     //sprintf("str,"Client Connection from %s\n", inet_ntoa(cli.sin_addr));
     //dlt_log(str);
     FD_SET(in_sock, &(daemon_local->master)); /* add to master set */
index f2b1dd9..91bb58d 100755 (executable)
@@ -134,6 +134,7 @@ typedef struct
 #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE)\r
     uint32_t lastOperationTime;\r
 #endif\r
+    int timeoutOnSend;\r
 } DltDaemonLocal;\r
 \r
 typedef struct\r
index 909d4f4..e09129a 100644 (file)
@@ -41,6 +41,9 @@ LoggingLevel = 6
 # The logging filename if internal logging mode is log to file (Default: /tmp/dlt.log)
 LoggingFilename = /tmp/dlt.log
 
+# Timeout on send to client (sec)                                                                                      
+TimeOutOnSend = 4
+
 ########################################################################
 # Offline Trace memory                                                 #
 ########################################################################