Set TCP_NODELAY for local connections to jtag_vpi.

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>
This commit is contained in:
Darius Rad 2018-05-22 16:37:47 -04:00 committed by Tomas Vanek
parent 9542cb7c3d
commit eb8dfd5ca8
1 changed files with 13 additions and 0 deletions

View File

@ -29,6 +29,10 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#endif #endif
#ifndef _WIN32
#include <netinet/tcp.h>
#endif
#define NO_TAP_SHIFT 0 #define NO_TAP_SHIFT 0
#define TAP_SHIFT 1 #define TAP_SHIFT 1
@ -368,6 +372,8 @@ static int jtag_vpi_execute_queue(void)
static int jtag_vpi_init(void) static int jtag_vpi_init(void)
{ {
int flag = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0); sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) { if (sockfd < 0) {
LOG_ERROR("Could not create socket"); LOG_ERROR("Could not create socket");
@ -395,6 +401,13 @@ static int jtag_vpi_init(void)
return ERROR_COMMAND_CLOSE_CONNECTION; 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); LOG_INFO("Connection to %s : %u succeed", server_address, server_port);
return ERROR_OK; return ERROR_OK;