Set TCP_NODELAY for local connections to jtag_vpi. 49/4549/2
authorDarius Rad <darius@bluespec.com>
Tue, 22 May 2018 20:37:47 +0000 (16:37 -0400)
committerTomas Vanek <vanekt@fbl.cz>
Mon, 26 Nov 2018 09:35:48 +0000 (09:35 +0000)
This increases performance drematically for local connections, which is the
most likely arrangement for a VPI connection.

Change-Id: Id15b29ae663f5d8100b2175357649bd03d05b7c8
Signed-off-by: Darius Rad <darius@bluespec.com>
Reviewed-on: http://openocd.zylin.com/4549
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/jtag/drivers/jtag_vpi.c

index 1a42b3a..35c7031 100644 (file)
 #include <arpa/inet.h>
 #endif
 
+#ifndef _WIN32
+#include <netinet/tcp.h>
+#endif
+
 #define NO_TAP_SHIFT   0
 #define TAP_SHIFT      1
 
@@ -368,6 +372,8 @@ static int jtag_vpi_execute_queue(void)
 
 static int jtag_vpi_init(void)
 {
+       int flag = 1;
+
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) {
                LOG_ERROR("Could not create socket");
@@ -395,6 +401,13 @@ static int jtag_vpi_init(void)
                return ERROR_COMMAND_CLOSE_CONNECTION;
        }
 
+       if (serv_addr.sin_addr.s_addr == htonl(INADDR_LOOPBACK)) {
+               /* This increases performance drematically for local
+                * connections, which is the most likely arrangement
+                * for a VPI connection. */
+               setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
+       }
+
        LOG_INFO("Connection to %s : %u succeed", server_address, server_port);
 
        return ERROR_OK;