Set TCP_QUICKACK on Linux to improve responsiveness when using client/service configuration

master
Adam Honse 4 months ago
parent 2a1b7a9e2e
commit d09c66900d

@ -25,6 +25,13 @@
#ifdef __linux__ #ifdef __linux__
#include <unistd.h> #include <unistd.h>
#include <sys/select.h> #include <sys/select.h>
#include <netinet/tcp.h>
#endif
#ifdef __linux__
const int yes = 1;
#else
const char yes = 1;
#endif #endif
using namespace std::chrono_literals; using namespace std::chrono_literals;
@ -438,6 +445,13 @@ int NetworkClient::recv_select(SOCKET s, char *buf, int len, int flags)
} }
else else
{ {
/*-------------------------------------------------*\
| Set QUICKACK socket option on Linux to improve |
| performance |
\*-------------------------------------------------*/
#ifdef __linux__
setsockopt(s, IPPROTO_TCP, TCP_QUICKACK, &yes, sizeof(yes));
#endif
return(recv(s, buf, len, flags)); return(recv(s, buf, len, flags));
} }

@ -26,14 +26,18 @@
#include <stdlib.h> #include <stdlib.h>
#include <iostream> #include <iostream>
const char yes = 1;
#ifdef WIN32 #ifdef WIN32
#include <Windows.h> #include <Windows.h>
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
#ifdef __linux__
const int yes = 1;
#else
const char yes = 1;
#endif
using namespace std::chrono_literals; using namespace std::chrono_literals;
NetworkClientInfo::NetworkClientInfo() NetworkClientInfo::NetworkClientInfo()
@ -548,6 +552,13 @@ int NetworkServer::recv_select(SOCKET s, char *buf, int len, int flags)
} }
else else
{ {
/*-------------------------------------------------*\
| Set QUICKACK socket option on Linux to improve |
| performance |
\*-------------------------------------------------*/
#ifdef __linux__
setsockopt(s, IPPROTO_TCP, TCP_QUICKACK, &yes, sizeof(yes));
#endif
return(recv(s, buf, len, flags)); return(recv(s, buf, len, flags));
} }
} }

@ -29,7 +29,11 @@
#define connect_socklen_t socklen_t #define connect_socklen_t socklen_t
#endif #endif
#ifdef __linux__
const int yes = 1;
#else
const char yes = 1; const char yes = 1;
#endif
net_port::net_port() net_port::net_port()
{ {
@ -328,6 +332,13 @@ void net_port::tcp_close()
int net_port::tcp_listen(char * recv_data, int length) int net_port::tcp_listen(char * recv_data, int length)
{ {
/*-------------------------------------------------*\
| Set QUICKACK socket option on Linux to improve |
| performance |
\*-------------------------------------------------*/
#ifdef __linux__
setsockopt(sock, IPPROTO_TCP, TCP_QUICKACK, &yes, sizeof(yes));
#endif
return(recv(sock, recv_data, length, 0)); return(recv(sock, recv_data, length, 0));
} }

Loading…
Cancel
Save