diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index b84098efff64e8abf72f89fb3226e511cb748efe..4ede03d90261075fd9691675a0b67e97187b7656 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -748,7 +748,7 @@ void dap_events_socket_set_writable_unsafe( dap_events_socket_t *sc, bool a_is_r
 
     sc->ev.events = events;
 
-    if ((!sc->server && sc->worker) || (sc->worker && sc->server->type != DAP_SERVER_UDP))
+    if (sc->worker && sc->type != DESCRIPTOR_TYPE_SOCKET_UDP)
         if ( epoll_ctl(sc->worker->epoll_fd, EPOLL_CTL_MOD, sc->socket, &sc->ev) ){
             int l_errno = errno;
             char l_errbuf[128];
diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c
index e57d203d23c2fb8ff807f5210f25cb4beef2bb68..504f027fc748713ff8f81a681c3d8582f66d63ec 100644
--- a/dap-sdk/net/core/dap_server.c
+++ b/dap-sdk/net/core/dap_server.c
@@ -185,7 +185,7 @@ dap_server_t* dap_server_new(dap_events_t *a_events, const char * a_addr, uint16
         l_server->es_listeners = dap_list_append(l_server->es_listeners, l_es);
 
         if (l_es) {
-            l_es->type = l_server->type == DAP_SERVER_TCP ? DESCRIPTOR_TYPE_SOCKET_LISTENING : DESCRIPTOR_TYPE_SOCKET;
+            l_es->type = l_server->type == DAP_SERVER_TCP ? DESCRIPTOR_TYPE_SOCKET_LISTENING : DESCRIPTOR_TYPE_SOCKET_UDP;
 #ifdef DAP_EVENTS_CAPS_EPOLL
             // Prepare for multi thread listening
             l_es->ev_base_flags  = EPOLLET| EPOLLIN | EPOLLEXCLUSIVE;
diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c
index f872bacc4a020c6ff95606249842b35863498239..affb8124102d7a35dfe74c9f126457b9c3ea7ec8 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -193,17 +193,20 @@ void *dap_worker_thread(void *arg)
                     break;
                     case DESCRIPTOR_TYPE_SOCKET:
                         l_must_read_smth = true;
-                        if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) {
-                            l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
-                                                sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0);
-                        } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) {
-                            socklen_t l_size = sizeof(l_cur->remote_addr);
-                            l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
-                                                    sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0,
-                                                    (struct sockaddr *)&l_cur->remote_addr, &l_size);
-                        }
+                        l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
+                                            sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0);
                         l_errno = errno;
                     break;
+                    case DESCRIPTOR_TYPE_SOCKET_UDP: {
+                        l_must_read_smth = true;
+                        socklen_t l_size = sizeof(l_cur->remote_addr);
+                        l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
+                                                sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0,
+                                                (struct sockaddr *)&l_cur->remote_addr, &l_size);
+
+                        l_errno = errno;
+                    }
+                    break;
                     case DESCRIPTOR_TYPE_SOCKET_LISTENING:
                         // Accept connection
                         if ( l_cur->callbacks.accept_callback){
@@ -311,14 +314,14 @@ void *dap_worker_thread(void *arg)
                 int l_errno;
                 switch (l_cur->type){
                     case DESCRIPTOR_TYPE_SOCKET:
-                        if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) {
-                            l_bytes_sent = send(l_cur->socket, (const char *)l_cur->buf_out,
-                                                l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL);
-                        } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) {
-                            l_bytes_sent = sendto(l_cur->socket, (const char *)l_cur->buf_out,
-                                                  l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL,
-                                                  (struct sockaddr *)&l_cur->remote_addr, sizeof(l_cur->remote_addr));
-                        }
+                        l_bytes_sent = send(l_cur->socket, (const char *)l_cur->buf_out,
+                                            l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL);
+                        l_errno = errno;
+                    break;
+                    case DESCRIPTOR_TYPE_SOCKET_UDP:
+                        l_bytes_sent = sendto(l_cur->socket, (const char *)l_cur->buf_out,
+                                              l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL,
+                                              (struct sockaddr *)&l_cur->remote_addr, sizeof(l_cur->remote_addr));
                         l_errno = errno;
                     break;
                     case DESCRIPTOR_TYPE_PIPE:
diff --git a/dap-sdk/net/core/include/dap_events_socket.h b/dap-sdk/net/core/include/dap_events_socket.h
index bfbde1ad1da33103641ef3c404fc3f559e14d476..474c26ad4ced342b3971f73dfb8d6a111fe74c40 100644
--- a/dap-sdk/net/core/include/dap_events_socket.h
+++ b/dap-sdk/net/core/include/dap_events_socket.h
@@ -111,6 +111,7 @@ typedef struct dap_events_socket_callbacks {
 
 typedef enum {
     DESCRIPTOR_TYPE_SOCKET = 0,
+    DESCRIPTOR_TYPE_SOCKET_UDP,
     DESCRIPTOR_TYPE_SOCKET_LISTENING,
     DESCRIPTOR_TYPE_QUEUE,
     DESCRIPTOR_TYPE_PIPE,