8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-02 10:40:38 +01:00

CORE-6004: Add a switch to disable the "TCP Loopback Fast Path" option

use port->getPortConfig() instead of Config::getDefaultConfig() to access the new setting value
This commit is contained in:
KarloX2 2019-02-20 17:42:12 +01:00
parent 540c90546f
commit 482c688321

View File

@ -481,7 +481,7 @@ static int send_partial(rem_port*, PACKET *);
static int xdrinet_create(XDR*, rem_port*, UCHAR *, USHORT, enum xdr_op);
static bool setNoNagleOption(rem_port*);
static bool setFastLoopbackOption(SOCKET s);
static bool setFastLoopbackOption(rem_port*, SOCKET s = 0);
static FPTR_INT tryStopMainThread = 0;
@ -940,7 +940,7 @@ rem_port* INET_connect(const TEXT* name,
goto err_close;
}
setFastLoopbackOption(port->port_handle);
setFastLoopbackOption(port);
n = connect(port->port_handle, pai->ai_addr, pai->ai_addrlen);
if (n != -1)
@ -1068,7 +1068,7 @@ static rem_port* listener_socket(rem_port* port, USHORT flag, const addrinfo* pa
inet_error(false, port, "listen", isc_net_connect_listen_err, INET_ERRNO);
}
setFastLoopbackOption(port->port_handle);
setFastLoopbackOption(port);
inet_ports->registerPort(port);
@ -1492,10 +1492,11 @@ static rem_port* aux_connect(rem_port* port, PACKET* packet)
port->auxAcceptError(packet);
inet_error(false, port, "socket", isc_net_event_connect_err, savedError);
}
new_port->port_handle = n;
int optval = 1;
setsockopt(n, SOL_SOCKET, SO_KEEPALIVE, (SCHAR*) &optval, sizeof(optval));
setFastLoopbackOption(n);
setFastLoopbackOption(new_port);
status = address.connect(n);
if (status < 0)
@ -1506,7 +1507,6 @@ static rem_port* aux_connect(rem_port* port, PACKET* packet)
inet_error(false, port, "connect", isc_net_event_connect_err, savedError);
}
new_port->port_handle = n;
new_port->port_peer_name = port->port_peer_name;
get_peer_info(new_port);
@ -1577,7 +1577,6 @@ static rem_port* aux_request( rem_port* port, PACKET* packet)
inet_error(false, port, "listen", isc_net_event_listen_err, INET_ERRNO);
}
setFastLoopbackOption(n);
rem_port* const new_port = alloc_port(port->port_parent,
(port->port_flags & PORT_no_oob) | PORT_async | PORT_connecting);
@ -1588,6 +1587,8 @@ static rem_port* aux_request( rem_port* port, PACKET* packet)
new_port->port_server_flags = port->port_server_flags;
new_port->port_channel = (int) n;
setFastLoopbackOption(new_port, n);
P_RESP* response = &packet->p_resp;
SockAddr port_address;
@ -3239,11 +3240,13 @@ static bool setNoNagleOption(rem_port* port)
return true;
}
bool setFastLoopbackOption(SOCKET s)
bool setFastLoopbackOption(rem_port* port, SOCKET s = 0)
{
#ifdef WIN_NT
if (Config::getDefaultConfig()->getTcpLoopbackFastPathOption())
if (port->getPortConfig()->getTcpLoopbackFastPathOption())
{
if (s == 0)
s = port->port_handle;
int optval = 1;
DWORD bytes = 0;