tpws: check for kernel version in fixseg

This commit is contained in:
bol-van 2024-11-19 14:01:24 +03:00
parent e12dd237c2
commit cc30a90556
3 changed files with 19 additions and 13 deletions

View File

@ -105,6 +105,7 @@ struct params_s
uint8_t proxy_type;
unsigned int fix_seg;
bool fix_seg_avail;
bool no_resolve;
bool skip_nodelay;
bool droproot;

View File

@ -538,6 +538,8 @@ void parse_params(int argc, char *argv[])
params.pf_enable = true; // OpenBSD and MacOS have no other choice
#endif
params.fix_seg_avail = socket_supports_notsent();
LIST_INIT(&params.hostlists);
LIST_INIT(&params.ipsets);
@ -1236,7 +1238,7 @@ void parse_params(int argc, char *argv[])
}
break;
case 65: /* fix-seg */
if (!socket_supports_notsent())
if (!params.fix_seg_avail)
{
DLOG_ERR("--fix-seg is supported since kernel 4.6\n");
exit_clean(1);

View File

@ -1248,19 +1248,22 @@ static bool handle_epoll(tproxy_conn_t *conn, struct tailhead *conn_list, uint32
bApplyOOB = i==0 && (split_flags & SPLIT_FLAG_OOB);
len = to-from;
#ifdef __linux__
if (params.fix_seg)
if (params.fix_seg_avail)
{
unsigned int wasted;
bool bWaitOK = socket_wait_notsent(conn->partner->fd, params.fix_seg, &wasted);
if (wasted)
VPRINT("WARNING ! wasted %u ms to fix segmenation\n", wasted);
if (!bWaitOK)
report_segfail();
}
else
{
if (socket_has_notsent(conn->partner->fd))
report_segfail();
if (params.fix_seg)
{
unsigned int wasted;
bool bWaitOK = socket_wait_notsent(conn->partner->fd, params.fix_seg, &wasted);
if (wasted)
VPRINT("WARNING ! wasted %u ms to fix segmenation\n", wasted);
if (!bWaitOK)
report_segfail();
}
else
{
if (socket_has_notsent(conn->partner->fd))
report_segfail();
}
}
#endif
VPRINT("Sending multisplit part %d %zd-%zd (len %zd)%s%s : ", i+1, from, to, len, bApplyDisorder ? " with disorder" : "", bApplyOOB ? " with OOB" : "");