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:
parent
540c90546f
commit
482c688321
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user