mirror of
https://github.com/OpenVPN/openvpn.git
synced 2024-09-20 03:52:28 +02:00
Don't overwrite socket flags when using DCO on Windows
Socket flags can be pushed, in which case they overwrite existing value. We use socket flags to distingust between DCO handle and socket on Windows. If server pushes --socket-flags, we treat DCO handle as socket and everything explodes. Fix by making link_socket_update_flags() update flags (like name suggests) instead of overwriting them. Also do not set TCP_NODELAY on DCO handle on Windows because it doesn't make sense. Change-Id: Ia34d73ca49041cb0ce22b84751cdbff57de96048 Signed-off-by: Lev Stipakov <lev@openvpn.net> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20230324121818.2358-1-lstipakov@gmail.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26513.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
a8170dd0e7
commit
82e7d5cfd8
@ -957,7 +957,8 @@ socket_set_mark(socket_descriptor_t sd, int mark)
|
||||
static bool
|
||||
socket_set_flags(socket_descriptor_t sd, unsigned int sockflags)
|
||||
{
|
||||
if (sockflags & SF_TCP_NODELAY)
|
||||
/* SF_TCP_NODELAY doesn't make sense for dco-win */
|
||||
if ((sockflags & SF_TCP_NODELAY) && (!(sockflags & SF_DCO_WIN)))
|
||||
{
|
||||
return socket_set_tcp_nodelay(sd, 1);
|
||||
}
|
||||
@ -972,7 +973,8 @@ link_socket_update_flags(struct link_socket *ls, unsigned int sockflags)
|
||||
{
|
||||
if (ls && socket_defined(ls->sd))
|
||||
{
|
||||
return socket_set_flags(ls->sd, ls->sockflags = sockflags);
|
||||
ls->sockflags |= sockflags;
|
||||
return socket_set_flags(ls->sd, ls->sockflags);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user