@@ -2072,7 +2072,7 @@
/*
* Calculate the flags based on the provided 'flags' argument.
*/
- if (flags & IOW_WAIT_SIGNAL)
+ if ((c->options.mode != MODE_SERVER) && (flags & IOW_WAIT_SIGNAL))
{
wait_signal(es, (void *)err_shift);
}
@@ -181,7 +181,8 @@
if (mi)
{
- if (defer || mbuf_defined(mi->tcp_link_out_deferred))
+ if ((defer && !proto_is_dgram(mi->context.c2.link_sockets[0]->info.proto))
+ || mbuf_defined(mi->tcp_link_out_deferred))
{
/* save to queue */
struct buffer *buf = &mi->context.c2.to_link;
@@ -176,10 +176,13 @@
int status, i;
unsigned int *persistent = &m->multi_io->tun_rwflags;
- for (i = 0; i < m->top.c1.link_sockets_num; i++)
+ if (!tuntap_is_dco_win(m->top.c1.tuntap))
{
- socket_set_listen_persistent(m->top.c2.link_sockets[i], m->multi_io->es,
- &m->top.c2.link_sockets[i]->ev_arg);
+ for (i = 0; i < m->top.c1.link_sockets_num; i++)
+ {
+ socket_set_listen_persistent(m->top.c2.link_sockets[i], m->multi_io->es,
+ &m->top.c2.link_sockets[i]->ev_arg);
+ }
}
if (has_udp_in_local_list(&m->top.options))
@@ -202,7 +205,8 @@
}
#endif
tun_set(m->top.c1.tuntap, m->multi_io->es, EVENT_READ, MULTI_IO_TUN, persistent);
-#if defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
+#if defined(ENABLE_DCO) \
+ && (defined(TARGET_LINUX) || defined(TARGET_FREEBSD) || defined(TARGET_WIN32))
dco_event_set(&m->top.c1.tuntap->dco, m->multi_io->es, MULTI_IO_DCO);
#endif
@@ -535,7 +539,8 @@
multi_io_action(m, mi, TA_INITIAL, false);
}
}
-#if defined(ENABLE_DCO) && (defined(TARGET_LINUX) || defined(TARGET_FREEBSD))
+#if defined(ENABLE_DCO) \
+ && (defined(TARGET_LINUX) || defined(TARGET_FREEBSD) || defined(TARGET_WIN32))
/* incoming data on DCO? */
else if (e->arg == MULTI_IO_DCO)
{