diff --git a/src/openvpn/mtcp.c b/src/openvpn/mtcp.c
index 2d0af06..524e437 100644
--- a/src/openvpn/mtcp.c
+++ b/src/openvpn/mtcp.c
@@ -118,11 +118,8 @@
 void
 multi_tcp_set_global_rw_flags(struct multi_context *m, struct multi_instance *mi)
 {
-    if (mi && !proto_is_dgram(mi->context.c2.link_sockets[0]->info.proto))
-    {
-        mi->socket_set_called = true;
-        socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
-                   mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
-                   &mi->tcp_rwflags);
-    }
+    mi->socket_set_called = true;
+    socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
+               mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
+               &mi->tcp_rwflags);
 }
diff --git a/src/openvpn/multi_io.c b/src/openvpn/multi_io.c
index a6ce1d4..50c95b5 100644
--- a/src/openvpn/multi_io.c
+++ b/src/openvpn/multi_io.c
@@ -76,9 +76,6 @@
         case TA_TUN_WRITE:
             return "TA_TUN_WRITE";
 
-        case TA_INITIAL:
-            return "TA_INITIAL";
-
         case TA_TIMEOUT:
             return "TA_TIMEOUT";
 
@@ -435,12 +432,6 @@
             multi_io_write_link(m, mi, true, mpp_flags);
             break;
 
-        case TA_INITIAL:
-            ASSERT(mi);
-            multi_tcp_set_global_rw_flags(m, mi);
-            multi_process_post(m, mi, mpp_flags);
-            break;
-
         case TA_INSTANCE_POST:
             ASSERT(mi);
             multi_process_post(m, mi, mpp_flags);
@@ -486,13 +477,16 @@
             break;
 
         case MTP_NONE:
-            if (mi && sockets_read_residual(c))
+            if (mi && link_socket_connection_oriented(mi->context.c2.link_sockets[0]))
             {
-                newaction = TA_SOCKET_READ_RESIDUAL;
-            }
-            else
-            {
-                multi_tcp_set_global_rw_flags(m, mi);
+                if (sockets_read_residual(c))
+                {
+                    newaction = TA_SOCKET_READ_RESIDUAL;
+                }
+                else
+                {
+                    multi_tcp_set_global_rw_flags(m, mi);
+                }
             }
             break;
 
@@ -564,7 +558,7 @@
                          * before returning to the main loop. */
                         if (mi)
                         {
-                            multi_io_action(m, mi, NULL, TA_INITIAL, false);
+                            multi_io_action(m, mi, NULL, TA_INSTANCE_POST, false);
                         }
                     }
                     else if (e->rwflags & EVENT_READ)
diff --git a/src/openvpn/multi_io.h b/src/openvpn/multi_io.h
index 591225c..e178240 100644
--- a/src/openvpn/multi_io.h
+++ b/src/openvpn/multi_io.h
@@ -41,10 +41,9 @@
 #define TA_SOCKET_WRITE_DEFERRED 5
 #define TA_TUN_READ              6
 #define TA_TUN_WRITE             7
-#define TA_INITIAL               8
-#define TA_TIMEOUT               9
-#define TA_TUN_WRITE_TIMEOUT     10
-#define TA_INSTANCE_POST         11
+#define TA_TIMEOUT               8
+#define TA_TUN_WRITE_TIMEOUT     9
+#define TA_INSTANCE_POST         10
 
 /*
  * I/O state and events tracker
