diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index c7acd09a14d39e45e357fc860321afdd39a69368..b84098efff64e8abf72f89fb3226e511cb748efe 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->worker && sc->server->type != DAP_SERVER_UDP)
+    if ((!sc->server && sc->worker) || (sc->worker && sc->server->type != DAP_SERVER_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_worker.c b/dap-sdk/net/core/dap_worker.c
index 969ce8d232ba5291ccaaa8cb1c237dd7a53478db..f872bacc4a020c6ff95606249842b35863498239 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -193,10 +193,10 @@ void *dap_worker_thread(void *arg)
                     break;
                     case DESCRIPTOR_TYPE_SOCKET:
                         l_must_read_smth = true;
-                        if (l_cur->server->type == DAP_SERVER_TCP) {
+                        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->type == DAP_SERVER_UDP) {
+                        } 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,
@@ -311,10 +311,10 @@ void *dap_worker_thread(void *arg)
                 int l_errno;
                 switch (l_cur->type){
                     case DESCRIPTOR_TYPE_SOCKET:
-                        if (l_cur->server->type == DAP_SERVER_TCP) {
+                        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->type == DAP_SERVER_UDP) {
+                        } 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));