diff --git a/dap-sdk/net/client/dap_client_http.c b/dap-sdk/net/client/dap_client_http.c
index 4b2bb2d16a86c6141fce289e24b262f041326c9f..60197e994f8d402a2421aa92d65849096cc05801 100644
--- a/dap-sdk/net/client/dap_client_http.c
+++ b/dap-sdk/net/client/dap_client_http.c
@@ -123,6 +123,10 @@ static bool s_timer_timeout_check(void * a_arg)
     assert(l_worker);
 
     if(dap_events_socket_check_unsafe(l_worker, l_es) ){
+        if ((l_es->type != DESCRIPTOR_TYPE_SOCKET_CLIENT) && (l_es->type != DESCRIPTOR_TYPE_SOCKET_UDP)) {
+            log_it(L_CRITICAL, "Timer esocket wrong argument: socket %d type %d, ignore this timeout...", l_es->socket, l_es->type);
+            return false;
+        }
         dap_client_http_pvt_t * l_http_pvt = PVT(l_es);
         log_it(L_WARNING,"Connection timeout for request http://%s:%u/%s, possible network problems or host is down",
                l_http_pvt->uplink_addr, l_http_pvt->uplink_port, l_http_pvt->path);
@@ -131,7 +135,11 @@ static bool s_timer_timeout_check(void * a_arg)
             l_http_pvt->were_callbacks_called = true;
         }
         l_http_pvt->is_closed_by_timeout = true;
-        l_es->flags |= DAP_SOCK_SIGNAL_CLOSE;
+        log_it(L_INFO, "Close %s sock %u type %d by timeout",
+               l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket, l_es->type);
+        dap_events_socket_remove_and_delete_unsafe(l_es, true);
+    } else {
+        log_it(L_INFO, "Socket %d type %d already disposed", l_es->socket, l_es->type);
     }
     return false;
 }
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index 2d7366689cf8b9363f472137d98a1cc04309e7ab..4ba149f4ed35b22376fb750e11d2ce3acb5b43ec 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -1466,7 +1466,7 @@ bool dap_events_socket_check_unsafe(dap_worker_t * a_worker,dap_events_socket_t
         if ( a_worker->esockets){
             dap_events_socket_t * l_es = NULL;
             pthread_rwlock_rdlock(&a_worker->esocket_rwlock);
-            HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(a_es), l_es );
+            HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(void*), l_es );
             pthread_rwlock_unlock(&a_worker->esocket_rwlock);
             return l_es == a_es;
         }else