diff --git a/CMakeLists.txt b/CMakeLists.txt
index b8fb39a469cdb12edc0fdc776a1db76274881098..fc1fe31ce6976df772c28ddf73b90e9e7befcd16 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.6-40")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-41")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 
 set(DAPSDK_MODULES "")
diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c
index 504f027fc748713ff8f81a681c3d8582f66d63ec..2443ee3ae644e95d0d3396e954ed11dec7f61acc 100644
--- a/dap-sdk/net/core/dap_server.c
+++ b/dap-sdk/net/core/dap_server.c
@@ -178,6 +178,8 @@ dap_server_t* dap_server_new(dap_events_t *a_events, const char * a_addr, uint16
         l_callbacks.error_callback = a_callbacks->error_callback;
     }
 
+// if we have poll exclusive
+#if defined(DAP_EVENTS_CAPS_EPOLL)
     for(size_t l_worker_id = 0; l_worker_id < dap_events_worker_get_count() ; l_worker_id++){
         dap_worker_t *l_w = dap_events_worker_get(l_worker_id);
         assert(l_w);
@@ -200,6 +202,24 @@ dap_server_t* dap_server_new(dap_events_t *a_events, const char * a_addr, uint16
             return NULL;
         }
     }
+#else
+    // or not
+    dap_worker_t *l_w = dap_events_worker_get_auto();
+    assert(l_w);
+    dap_events_socket_t * l_es = dap_events_socket_wrap2( l_server, a_events, l_server->socket_listener, &l_callbacks);
+    if (l_es) {
+        l_server->es_listeners = dap_list_append(l_server->es_listeners, l_es);
+        l_es->type = l_server->type == DAP_SERVER_TCP ? DESCRIPTOR_TYPE_SOCKET_LISTENING : DESCRIPTOR_TYPE_SOCKET_UDP;
+        l_es->_inheritor = l_server;
+        pthread_mutex_lock(&l_server->started_mutex);
+        dap_worker_add_events_socket( l_es, l_w );
+        pthread_cond_wait(&l_server->started_cond, &l_server->started_mutex);
+        pthread_mutex_unlock(&l_server->started_mutex);
+    } else{
+        log_it(L_WARNING, "Can't wrap event socket for %s:%u server", a_addr, a_port);
+        return NULL;
+    }
+#endif
     return  l_server;
 }
 
diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c
index 4686dc6b39da4ca405bc647d1f329796c6d616b1..9300b20d8ce8285e4e050d53b9d3e99383f261ec 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -185,37 +185,24 @@ void *dap_worker_thread(void *arg)
 
             int l_sock_err = 0, l_sock_err_size = sizeof(l_sock_err);
             //connection already closed (EPOLLHUP - shutdown has been made in both directions)
-            if( l_flag_hup) {
+            if( l_flag_hup || l_flag_rdhup) {
                 switch (l_cur->type ){
-                    case DESCRIPTOR_TYPE_SOCKET_LISTENING:
+                case DESCRIPTOR_TYPE_SOCKET_UDP:
                     case DESCRIPTOR_TYPE_SOCKET:
                         getsockopt(l_cur->socket, SOL_SOCKET, SO_ERROR, (void *)&l_sock_err, (socklen_t *)&l_sock_err_size);
                         if (l_sock_err) {
-                            dap_events_socket_set_readable_unsafe(l_cur, false);
                             dap_events_socket_set_writable_unsafe(l_cur, false);
                             l_cur->buf_out_size = 0;
                             l_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
-                            l_flag_error = l_flag_read = l_flag_write = false;
+                            l_flag_error = l_flag_write = false;
                             l_cur->callbacks.error_callback(l_cur, l_sock_err); // Call callback to process error event
                             log_it(L_INFO, "Socket shutdown (EPOLLHUP): %s", strerror(l_sock_err));
                         }
                     break;
-                    default: log_it(L_WARNING, "Unimplemented EPOLLHUP for socket type %d", l_cur->type);
-                }
-            }
-
-            if (l_flag_rdhup ){ // Lets think thats disconnected state
-                switch (l_cur->type ){
-                    case DESCRIPTOR_TYPE_SOCKET:
-                    case DESCRIPTOR_TYPE_SOCKET_UDP:
-                        l_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
-                    break;
-                    default:{
+                    default:
                         if(s_debug_reactor)
                             log_it(L_INFO,"RDHUP event on esocket %p (%d) type %d", l_cur, l_cur->socket, l_cur->type );
-                    }
                 }
-                //l_cur->callbacks.error_callback(l_cur, l_sock_err); // Call callback to process error event
             }
 
             if(l_flag_nval ){