mirror of
https://passt.top/passt
synced 2024-12-22 21:55:22 +00:00
tcp: Limit TCP_INFO getsockopt() syscalls
There's no need to constantly query the socket for number of acknowledged bytes if we're far from exhausting the sending window, just do it if we're at least down to 90% of it. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
d372c42460
commit
fd5050ccba
3
tcp.c
3
tcp.c
@ -1075,13 +1075,14 @@ static void tcp_rst(struct ctx *c, struct tcp_tap_conn *conn);
|
|||||||
static int tcp_send_to_tap(struct ctx *c, struct tcp_tap_conn *conn,
|
static int tcp_send_to_tap(struct ctx *c, struct tcp_tap_conn *conn,
|
||||||
int flags, char *in, int len)
|
int flags, char *in, int len)
|
||||||
{
|
{
|
||||||
|
uint32_t ack_offset = conn->seq_from_tap - conn->seq_ack_to_tap;
|
||||||
char buf[USHRT_MAX] = { 0 }, *data;
|
char buf[USHRT_MAX] = { 0 }, *data;
|
||||||
struct tcp_info info = { 0 };
|
struct tcp_info info = { 0 };
|
||||||
socklen_t sl = sizeof(info);
|
socklen_t sl = sizeof(info);
|
||||||
struct tcphdr *th;
|
struct tcphdr *th;
|
||||||
int ws = 0, err;
|
int ws = 0, err;
|
||||||
|
|
||||||
if (conn->seq_from_tap == conn->seq_ack_to_tap && !flags && len) {
|
if (ack_offset < conn->tcpi_snd_wnd / 10 && !flags) {
|
||||||
err = 0;
|
err = 0;
|
||||||
info.tcpi_bytes_acked = conn->tcpi_acked_last;
|
info.tcpi_bytes_acked = conn->tcpi_acked_last;
|
||||||
info.tcpi_snd_wnd = conn->tcpi_snd_wnd;
|
info.tcpi_snd_wnd = conn->tcpi_snd_wnd;
|
||||||
|
Loading…
Reference in New Issue
Block a user