diff --git a/dap-sdk b/dap-sdk
index d4c78e770b397d62f7ac696d0db3a42439a77ae1..6239e7e3fe508cc8da00fae5ddbf09a0dff3e05e 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit d4c78e770b397d62f7ac696d0db3a42439a77ae1
+Subproject commit 6239e7e3fe508cc8da00fae5ddbf09a0dff3e05e
diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index a2f1d10a51483a632bf140d641aaeca93851a354..db4138e4a7c9e4286b244e64f5a56e0fda1f9c15 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -216,13 +216,15 @@ dap_chain_cell_t * dap_chain_cell_create_fill(dap_chain_t * a_chain, dap_chain_c
         pthread_rwlock_unlock(&a_chain->cell_rwlock);
         return l_cell;
     }
-#define CLEANUP_AND_RET return ({ fclose(l_file); DAP_DELETE(l_cell); pthread_rwlock_unlock(&a_chain->cell_rwlock); NULL; })
     char file_storage_path[MAX_PATH];
     snprintf(file_storage_path, MAX_PATH, "%s/%0"DAP_UINT64_FORMAT_x".dchaincell",
              DAP_CHAIN_PVT(a_chain)->file_storage_dir, a_cell_id.uint64);
-    
-    FILE *l_file = fopen(file_storage_path, "a+b");
-    if ( !l_file ) {
+    FILE *l_file = NULL;
+#define CLEANUP_AND_RET return ({ if (l_file) fclose(l_file); \
+    DAP_DELETE(l_cell); \
+    pthread_rwlock_unlock(&a_chain->cell_rwlock); \
+    NULL; })
+    if ( !(l_file = fopen(file_storage_path, "a+b")) ) {
         log_it(L_ERROR, "Chain cell \"%s\" 0x%016"DAP_UINT64_FORMAT_X" cannot be opened, error %d",
                         file_storage_path, a_cell_id.uint64, errno);
         CLEANUP_AND_RET;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index d8cf287635e09d3650be3ca81fdad18b7b19f911..1ce9248337722e35cdd0c6f1e1961a7a32cb4cb0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -317,12 +317,9 @@ int dap_chain_net_init()
             s_net_init(l_dir_entry->d_name, l_acl_idx++);
         }
         closedir(l_net_dir);
-    }else{
-        int l_errno = errno;
-        char l_errbuf[128];
-        l_errbuf[0] = 0;
-        strerror_r(l_errno,l_errbuf,sizeof (l_errbuf));
-        log_it(L_WARNING,"Can't open entries on path %s: \"%s\" (code %d)", l_net_dir_str, l_errbuf, l_errno);
+    } else {
+        log_it(L_WARNING, "Can't open entries on path %s, error %d: \"%s\"",
+                           l_net_dir_str, errno, dap_strerror(errno));
     }
     DAP_DELETE (l_net_dir_str);
 
@@ -1932,28 +1929,38 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx)
             return -16;
         }
     }
-    uint16_t l_permalink_hosts_count = 0;
+    uint16_t l_permalink_hosts_count = 0, i, e;
     char **l_permanent_links_hosts = dap_config_get_array_str(l_cfg, "general", "permanent_nodes_hosts", &l_permalink_hosts_count);
-    for (uint16_t i = 0; i < dap_min(l_permalink_hosts_count, l_net_pvt->permanent_links_count); ++i) {
-        uint16_t l_port = 0;
-        char l_host[DAP_HOSTADDR_STRLEN + 1] = { '\0' };
-        if (dap_net_parse_hostname(l_permanent_links_hosts[i], l_host, &l_port) || !l_port) {
-            log_it(L_ERROR, "Incorrect format of host \"%s\", fix net config or recheck internet connection, and restart node",
-                            l_permanent_links_hosts[i]);
-            dap_chain_net_delete(l_net);
-            dap_config_close(l_cfg);
-            return -16;
+    for (i = 0, e = 0; i < dap_min(l_permalink_hosts_count, l_net_pvt->permanent_links_count); ++i) {
+        char l_host[DAP_HOSTADDR_STRLEN + 1] = { '\0' }; uint16_t l_port = 0;
+        struct sockaddr_storage l_saddr;        
+        if ( dap_net_parse_config_address(l_permanent_links_hosts[i], l_host, &l_port, NULL, NULL) < 0 
+            || dap_net_resolve_host(l_host, dap_itoa(l_port), false, &l_saddr, NULL) < 0 )
+        {
+            log_it(L_ERROR, "Incorrect address \"%s\", fix \"%s\" network config"
+                            "or check internet connection and restart node",
+                            a_net_name, l_permanent_links_hosts[i]);
+            ++e;
+            continue;
         }
         l_net_pvt->permanent_links[i]->uplink_port = l_port;
         dap_strncpy(l_net_pvt->permanent_links[i]->uplink_addr, l_host, DAP_HOSTADDR_STRLEN);
     }
+    if ( i && (e == i) ) {
+        log_it(L_ERROR, "%d / %d permanent links are invalid or can't be accessed, fix \"%s\"" 
+                        "network config or check internet connection and restart node", 
+                        e, i, a_net_name);
+        dap_chain_net_delete(l_net);
+        dap_config_close(l_cfg);
+        return -16;
+    }
 
     char **l_authorized_nodes_addrs = dap_config_get_array_str(l_cfg, "general", "authorized_nodes_addrs", &l_net_pvt->authorized_nodes_count);
     if (!l_net_pvt->authorized_nodes_count)
         log_it(L_WARNING, "Can't read PoA nodes addresses");
     else
         l_net_pvt->authorized_nodes_addrs = DAP_NEW_Z_COUNT(dap_chain_node_addr_t, l_net_pvt->authorized_nodes_count);
-    for (uint16_t i = 0; i < l_net_pvt->authorized_nodes_count; ++i) {
+    for (i = 0; i < l_net_pvt->authorized_nodes_count; ++i) {
         dap_chain_node_addr_t l_addr;
         if (dap_stream_node_addr_from_str(&l_addr, l_authorized_nodes_addrs[i])) {
             log_it(L_ERROR, "Incorrect format of node address \"%s\", fix net config and restart node", l_authorized_nodes_addrs[i]);
@@ -1974,15 +1981,17 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx)
         dap_config_close(l_cfg);
         return -4;
     }
-    for (uint16_t i = 0; i < l_net_pvt->seed_nodes_count; ++i) {
-        uint16_t l_port = 0;
-        char l_host[DAP_HOSTADDR_STRLEN + 1] = { '\0' };
-        if (dap_net_parse_hostname(l_seed_nodes_hosts[i], l_host, &l_port) || !l_port) {
-            log_it(L_ERROR, "Incorrect format of host \"%s\", fix net config or recheck internet connection, and restart node",
-                            l_seed_nodes_hosts[i]);
-            dap_chain_net_delete(l_net);
-            dap_config_close(l_cfg);
-            return -16;
+    for (i = 0, e = 0; i < l_net_pvt->seed_nodes_count; ++i) {
+        char l_host[DAP_HOSTADDR_STRLEN + 1] = { '\0' }; uint16_t l_port = 0;
+        struct sockaddr_storage l_saddr;
+        if ( dap_net_parse_config_address(l_seed_nodes_hosts[i], l_host, &l_port, NULL, NULL) < 0 
+            || dap_net_resolve_host(l_host, dap_itoa(l_port), false, &l_saddr, NULL) < 0)
+        {
+            log_it(L_ERROR, "Incorrect address \"%s\", fix \"%s\" network config"
+                            "or check internet connection and restart node",
+                            a_net_name, l_seed_nodes_hosts[i]);
+            ++e;
+            continue;
         }
         l_net_pvt->seed_nodes_info[i] = DAP_NEW_Z(struct request_link_info);
         if (!l_net_pvt->seed_nodes_info[i]) {
@@ -1994,6 +2003,14 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx)
         l_net_pvt->seed_nodes_info[i]->port = l_port;
         dap_strncpy(l_net_pvt->seed_nodes_info[i]->addr, l_host, DAP_HOSTADDR_STRLEN);
     }
+    if ( i && (e == i) ) {
+        log_it(L_ERROR, "%d / %d seed links are invalid or can't be accessed, fix \"%s\"" 
+                        "network config or check internet connection and restart node", 
+                        e, i, a_net_name);
+        dap_chain_net_delete(l_net);
+        dap_config_close(l_cfg);
+        return -16;
+    }
 
     /* *** Chains init by configs *** */
     char * l_chains_path = dap_strdup_printf("%s/network/%s", dap_config_path(), l_net->pub.name);
@@ -2308,7 +2325,8 @@ bool s_net_load(void *a_arg)
             if (!l_ext_addr) {
                 log_it(L_INFO, "External address is not set, will be detected automatically");
             } else {
-                if ( dap_net_parse_hostname(l_ext_addr, l_host, &l_ext_port) )
+                struct sockaddr_storage l_saddr = { };
+                if ( 0 > dap_net_parse_config_address(l_ext_addr, l_host, &l_ext_port, &l_saddr, NULL) )
                     log_it(L_ERROR, "Invalid server address \"%s\", fix config and restart node", l_ext_addr);
                 else {
                     uint8_t l_hostlen = dap_strlen(l_host);
@@ -2317,9 +2335,11 @@ bool s_net_load(void *a_arg)
                 }
             }
             if ( !l_net_pvt->node_info->ext_port ) {
-                char **l_listening = dap_config_get_array_str(g_config, "server", "listen_address", NULL);
-                l_net_pvt->node_info->ext_port = l_listening && !dap_net_parse_hostname(*l_listening, NULL, &l_ext_port) && l_ext_port
-                    ? l_ext_port : 8079; // TODO: default port?
+                char **l_listening = dap_config_get_array_str(g_config, "server", DAP_CFG_PARAM_LISTEN_ADDRS, NULL);
+                l_net_pvt->node_info->ext_port =
+                    ( l_listening && dap_net_parse_config_address(*l_listening, NULL, &l_ext_port, NULL, NULL) > 0 && l_ext_port )
+                        ? l_ext_port
+                        : dap_config_get_item_int16_default(g_config, "server", DAP_CFG_PARAM_LEGACY_PORT, 8079); // TODO: default port?
             }
         } // otherwise, we're in seed list - seed config predominates server config thus disambiguating the settings
         
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 8098561f30992d687f1df2788ccaadae6275eb26..eee2e5e2a920b000e05260910540251213a87370 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -58,25 +58,11 @@ static bool s_debug_cli = false;
  */
 int dap_chain_node_cli_init(dap_config_t * g_config)
 {
-    s_debug_cli = dap_config_get_item_bool_default(g_config,"conserver","debug_cli",false);
-
-    bool l_conserver_enabled = dap_config_get_item_bool_default( g_config, "conserver", "enabled", true );
-
-    if ( !l_conserver_enabled ) {
-
-        log_it( L_WARNING, "Console Server is dissabled." );
-        return 0;
-    }
-
-    uint16_t l_listen_port = dap_config_get_item_uint16_default( g_config, "conserver", "listen_port_tcp",0); // For backward compatibility
-    if(l_listen_port == 0)
-        l_listen_port = dap_config_get_item_uint16_default( g_config, "conserver", "listen_port",0);
-
-    dap_cli_server_init( s_debug_cli,
-                         l_listen_port ? dap_config_get_item_str(g_config, "conserver", "listen_address")
-                                       : dap_config_get_item_str( g_config, "conserver", "listen_unix_socket_path"),
-                         l_listen_port, dap_config_get_item_str( g_config, "conserver", "listen_unix_socket_permissions")
-                        );
+    if ( !dap_config_get_item_bool_default(g_config, "cli-server", "enabled", true) )
+        return log_it( L_WARNING, "CLI server is disabled" ), 0;
+    s_debug_cli = dap_config_get_item_bool_default(g_config, "cli-server", "debug-cli", false);
+    if ( dap_cli_server_init(s_debug_cli, "cli-server") )
+        return log_it(L_ERROR, "Can't init CLI server!"), -1;
 
     dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database",
             "global_db cells add -cell <cell_id> \n"
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index e88688ca77071f3a9554b459b7d9ebfcebb77a32..2d721f9f6cd99593fac05f75bfe9da5eb220b774 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -922,7 +922,8 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply)
         if (l_addr_str && dap_chain_net_is_my_node_authorized(l_net)) {
             // We're in authorized list, add directly
             uint16_t l_port = 0;
-            if (dap_net_parse_hostname(l_hostname, l_node_info->ext_host, &l_port)) {
+            struct sockaddr_storage l_verifier = { };
+            if ( 0 > dap_net_parse_config_address(l_hostname, l_node_info->ext_host, &l_port, &l_verifier, NULL) ) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't parse host string %s", l_hostname);
                 return -6;
             }
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 41e93f4a1e2c5dcf7d22f075dc27778153eb8322..548e6fd9850255fdcb6f6c598460c28089d84788 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -415,10 +415,7 @@ int dap_chain_node_client_wait(dap_chain_node_client_t *a_client, int a_waited_s
             ret = -1;
             break;
         }else if (l_ret_wait != 0 ){
-            char l_errbuf[128];
-            l_errbuf[0] = '\0';
-            strerror_r(l_ret_wait,l_errbuf,sizeof (l_errbuf));
-            log_it(L_ERROR, "Pthread condition timed wait returned \"%s\"(code %d)", l_errbuf, l_ret_wait);
+            log_it(L_CRITICAL, "pthread_cond_timedwait() error %d:\"%s\"", l_ret_wait, dap_strerror(l_ret_wait));
         }
     }
     pthread_mutex_unlock(&a_client->wait_mutex);
diff --git a/modules/net/dap_chain_node_dns_server.c b/modules/net/dap_chain_node_dns_server.c
index f633750b5564c9088197d932a794e2d9b9210115..3a14319538f31be19b0d7eea411959d994184b9e 100644
--- a/modules/net/dap_chain_node_dns_server.c
+++ b/modules/net/dap_chain_node_dns_server.c
@@ -256,15 +256,14 @@ cleanup:
     return;
 }
 
-void dap_dns_server_start(char *a_port)
+void dap_dns_server_start(const char *a_cfg_section)
 {
-// memory alloc
     DAP_NEW_Z_RET(s_dns_server, dap_dns_server_t, NULL);
-    dap_events_socket_callbacks_t l_cb = {};
-    l_cb.read_callback = dap_dns_client_read;
-    s_dns_server->instance = dap_server_new(&a_port, 1, DAP_SERVER_UDP, &l_cb);
+    dap_events_socket_callbacks_t l_cb = { .read_callback = dap_dns_client_read };
+    s_dns_server->instance = dap_server_new(a_cfg_section, NULL, &l_cb);
     if (!s_dns_server->instance) {
         log_it(L_ERROR, "Can't start DNS server");
+        DAP_DELETE(s_dns_server);
         return;
     }
     dap_dns_zone_register(&s_root_alias[0], dap_chain_net_balancer_dns_issue_link);  // root resolver
diff --git a/modules/net/include/dap_chain_node_dns_server.h b/modules/net/include/dap_chain_node_dns_server.h
index 4b8d02b3e596b8823dfea50022844e9f7355778f..aa22b05bd3ec02ae7e1469d9780321d9b923f9bf 100644
--- a/modules/net/include/dap_chain_node_dns_server.h
+++ b/modules/net/include/dap_chain_node_dns_server.h
@@ -117,7 +117,7 @@ typedef struct _dap_dns_server_t {
 
 
 
-void dap_dns_server_start(char *a_port);
+void dap_dns_server_start(const char* a_cfg_section);
 void dap_dns_server_stop();
 int dap_dns_zone_register(char *zone, dap_dns_zone_callback_t callback);
 int dap_dns_zone_unregister(char *zone);
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index edc7d16a3ad40cd7dd9c2a73864f270585d97720..25e4862174418d897f28102f5242d24cb79eed64 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -161,7 +161,8 @@ static int s_srv_datum_cli(int argc, char ** argv, void **a_str_reply)
                     return -4;
                 }
             }else{
-                log_it(L_ERROR, "Can't open file '%s' for write: %s", l_path, strerror(errno));
+                log_it(L_ERROR, "Can't open file '%s' for write, error %d: \"%s\"",
+                                l_path, errno, dap_strerror(errno));
                 return -2;
             }
         }
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 7ddd013c18eb65d72d8e0b733aac46804a30d525..be273aff004cde2f5ccbbdde96354eaf390cdd1a 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -701,10 +701,8 @@ static int s_vpn_tun_create(dap_config_t * g_config)
     // Create utun socket
     int l_tun_fd = socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL);
     if( l_tun_fd < 0){
-        int l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Opening utun device control (SYSPROTO_CONTROL) error: '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR, "Opening utun device control (SYSPROTO_CONTROL) error %d: \"%s\"",
+                        errno, dap_strerror(errno));
         l_err = -101;
         goto lb_err;
     }
@@ -713,10 +711,8 @@ static int s_vpn_tun_create(dap_config_t * g_config)
 
     // Pass control structure to the utun socket
     if( ioctl(l_tun_fd, CTLIOCGINFO, &l_ctl_info ) < 0 ){
-        int l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't execute ioctl(CTLIOCGINFO): '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR, "Can't execute ioctl(CTLIOCGINFO), error %d: \"%s\"", 
+                        errno, dap_strerror(errno));
         l_err = -102;
         goto lb_err;
 
@@ -739,10 +735,8 @@ static int s_vpn_tun_create(dap_config_t * g_config)
             break;
     }
     if (l_ret < 0){
-        int l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't create utun device: '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR, "Can't create utun device, error %d: \"%s\"", 
+                        errno, dap_strerror(errno));
         l_err = -103;
         goto lb_err;
 
@@ -753,10 +747,8 @@ static int s_vpn_tun_create(dap_config_t * g_config)
     char l_utunname[20];
     socklen_t l_utunname_len = sizeof(l_utunname);
     if (getsockopt(l_tun_fd, SYSPROTO_CONTROL, UTUN_OPT_IFNAME, l_utunname, &l_utunname_len) ){
-        int l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't get utun device name: '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR, "Can't get utun device name, error %d: \"%s\"",
+                        errno, dap_strerror(errno));
         l_err = -104;
         goto lb_err;
     }
@@ -771,13 +763,14 @@ static int s_vpn_tun_create(dap_config_t * g_config)
 #if !defined(DAP_OS_DARWIN) &&( defined (DAP_OS_LINUX) || defined (DAP_OS_BSD))
         int l_tun_fd;
         if( (l_tun_fd = open("/dev/net/tun", O_RDWR | O_NONBLOCK)) < 0 ) {
-            log_it(L_ERROR,"Opening /dev/net/tun error: '%s'", strerror(errno));
+            log_it(L_ERROR, "Opening /dev/net/tun error %d: \"%s\"",
+                            errno, dap_strerror(errno));
             l_err = -100;
             break;
         }
         log_it(L_DEBUG,"Opening /dev/net/tun:%u", i);
         if( (l_err = ioctl(l_tun_fd, TUNSETIFF, (void *)& s_raw_server->ifr)) < 0 ) {
-            log_it(L_CRITICAL, "ioctl(TUNSETIFF) error: '%s' ",strerror(errno));
+            log_it(L_CRITICAL, "ioctl(TUNSETIFF) error %d: \"%s\"", errno, dap_strerror(errno));
             close(l_tun_fd);
             break;
         }
@@ -1916,12 +1909,11 @@ static bool s_es_tun_write(dap_events_socket_t *a_es, void *arg)
                 l_tun->es->buf_out_size -= l_pkt_size;
                 l_shift += l_pkt_size;
                 break;
-            default: {
-                char l_errbuf[128];
-                strerror_r(l_errno, l_errbuf, sizeof(l_errbuf));
-                log_it(L_ERROR, "Error on writing to tun: \"%s\" code %d", l_errbuf, errno);
+            default:
+                log_it(L_ERROR, "Write to tun error %d: \"%s\"",
+                                errno, dap_strerror(errno));
                 break;
-            }}
+            }
             break; // Finish the buffer processing immediately
         }
     }
diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
index 1dfb14c397b8557c7d598b23f86667eeca7f8aa0..f5de32b36fd1feed2f823239d4ade8858b8b51a0 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
@@ -147,20 +147,14 @@ int tun_device_create(char *dev)
     // Create utun socket
     int l_tun_fd = socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL);
     if( l_tun_fd < 0){
-        l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Opening utun device control (SYSPROTO_CONTROL) error: '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR,"Opening utun device control (SYSPROTO_CONTROL) error %d: \"%s\"", errno, dap_strerror(errno));
         goto lb_err;
     }
     log_it(L_INFO, "Utun SYSPROTO_CONTROL descriptor obtained");
 
     // Pass control structure to the utun socket
     if( ioctl(l_tun_fd, CTLIOCGINFO, &l_ctl_info ) < 0 ){
-        l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't execute ioctl(CTLIOCGINFO): '%s' (code %d)", l_errbuf, l_errno);
+        log_it(L_ERROR,"Can't execute ioctl(CTLIOCGINFO) %d: \"%s\"", errno, dap_strerror(errno));
         goto lb_err;
 
     }
@@ -181,11 +175,8 @@ int tun_device_create(char *dev)
         if(l_ret == 0)
             break;
     }
-    if (l_ret < 0){
-        l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't create utun device: '%s' (code %d)", l_errbuf, l_errno);
+    if (l_ret < 0) {
+        log_it(L_ERROR,"Can't create utun device %d: \"%s\"", errno, dap_strerror(errno));
         goto lb_err;
 
     }
@@ -194,11 +185,8 @@ int tun_device_create(char *dev)
     log_it(L_NOTICE, "Utun device created");
     char l_utunname[20];
     socklen_t l_utunname_len = sizeof(l_utunname);
-    if (getsockopt(l_tun_fd, SYSPROTO_CONTROL, UTUN_OPT_IFNAME, l_utunname, &l_utunname_len) ){
-        l_errno = errno;
-        char l_errbuf[256];
-        strerror_r(l_errno, l_errbuf,sizeof(l_errbuf));
-        log_it(L_ERROR,"Can't get utun device name: '%s' (code %d)", l_errbuf, l_errno);
+    if (getsockopt(l_tun_fd, SYSPROTO_CONTROL, UTUN_OPT_IFNAME, l_utunname, &l_utunname_len) ) {
+        log_it(L_ERROR,"Can't get utun device name %d: \"%s\"", errno, dap_strerror(errno));
         goto lb_err;
     }
     log_it(L_NOTICE, "Utun device name \"%s\"", l_utunname);
@@ -679,7 +667,7 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data,
     if((ret = /*sendto(ch_sf->raw_l3_sock, pkt_data, pkt_data_size, 0, (struct sockaddr *) &sin, sizeof(sin))*/-1  )
             < 0) {
         //    if((ret = write(raw_server->tun_fd, sf_pkt->data, sf_pkt->header.op_data.data_size))<0){
-        log_it(L_ERROR, "write() returned error %d : '%s'", ret, strerror(errno));
+        log_it(L_ERROR, "write() error %d : \"%s\"", errno, dap_strerror(errno));
         //log_it(ERROR,"raw socket ring buffer overflowed");
         ch_vpn_pkt_t *pkt_out = (ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header));
         if (!pkt_out) {