Opened 6 years ago

Closed 6 years ago

#429 closed Bug / Defect (duplicate)

tcp-nodelay in client causes assertion failure

Reported by: jkb Owned by:
Priority: minor Milestone:
Component: Configuration Version: OpenVPN 2.3.4 (Community Ed)
Severity: Not set (select this one, unless your'e a OpenVPN developer) Keywords:
Cc:

Description

If a "tcp-nodelay" option appears in the configuration file, the following assertion failure occurs in OpenVPN 2.2.1, 2.3.3, and 2.3.4 in Tunnelblick:

"Assertion failed at helper.c:476"

See the discussion at https://groups.google.com/forum/#!topic/tunnelblick-discuss/EtdvdnpW-pk for more info.

Change History (2)

comment:1 Changed 6 years ago by Gert Döring

Ummm. Well. helper.c line 476 in 2.3.4 or 2.3.4 does not have any ASSERT() line anywhere close.

In 2.2.1, there is indeed a line 476 with an ASSERT. Interesting bit of code...

void
helper_tcp_nodelay (struct options *o)
{
#if P2MP_SERVER

if (o->server_flags & SF_TCP_NODELAY_HELPER)

{

if (o->mode == MODE_SERVER)

{

o->sockflags |= SF_TCP_NODELAY;
push_option (o, print_str ("socket-flags TCP_NODELAY", &o->gc), M_USAGE);

}

else

{

ASSERT (0);

}

}

#endif
}

... seems you're not supposed to use "tcp-nodelay" on the client, but "socket-flags TCP_NODELAY" instead.

Of course this is not the most user-friendly way to tell users. Interestingly enough, I find this check in options.c:

if (options->server_flags & SF_TCP_NODELAY_HELPER)

msg (M_USAGE, "--tcp-nodelay requires --mode server");

so it *should* tell you - unfortunately the order of events is different, so you get the ASSERT() before the code has a chance to tell you that the option is for the server side.

Anyway, this actually is a duplicate of trac #408, which has a patch, which just hasn't been merged yet.

comment:2 Changed 6 years ago by Gert Döring

Resolution: duplicate
Status: newclosed

Closing this one, continueing in #408

Note: See TracTickets for help on using tickets.