From 7a8bc4ea3350ce304882db9b46f4993a154e0b0a Mon Sep 17 00:00:00 2001 From: Mock Date: Mon, 30 Mar 2026 14:53:59 +0800 Subject: [PATCH] =?UTF-8?q?debug:=20=E5=A2=9E=E5=8A=A0=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=B5=8B=E8=AF=95=E8=BF=9E=E9=80=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- c/cmd/kcppeer.c | 7 +++++-- c/src/peer_kcp_client.c | 6 ++++++ c/src/transport_kcp.c | 10 ++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/c/cmd/kcppeer.c b/c/cmd/kcppeer.c index c592373..64e7afb 100644 --- a/c/cmd/kcppeer.c +++ b/c/cmd/kcppeer.c @@ -3,6 +3,7 @@ #include "peer_kcp_client.h" #include +#include typedef struct kcppeer_receive_ctx { kcp_client_t *client; @@ -242,10 +243,12 @@ int main(int argc, char **argv) { actual_dial_target = relay_via[0] != '\0' ? relay_via : server_addr; client = kcp_client_dial(server_addr, relay_via, peer_id, bind_ip, bind_device, latency_logger, packet_logger, stats_logger, stats_interval_ms); if (client == NULL) { + int saved_errno = errno; + const char *reason = saved_errno != 0 ? strerror(saved_errno) : "unknown error"; if (relay_via[0] != '\0') { - fprintf(stderr, "kcppeer: dial target %s failed (logical server %s)\n", actual_dial_target, server_addr); + fprintf(stderr, "kcppeer: dial target %s failed (logical server %s): %s (errno=%d)\n", actual_dial_target, server_addr, reason, saved_errno); } else { - fprintf(stderr, "kcppeer: dial kcp server %s failed\n", server_addr); + fprintf(stderr, "kcppeer: dial kcp server %s failed: %s (errno=%d)\n", server_addr, reason, saved_errno); } goto cleanup; } diff --git a/c/src/peer_kcp_client.c b/c/src/peer_kcp_client.c index 8c9b80c..b3b21d3 100644 --- a/c/src/peer_kcp_client.c +++ b/c/src/peer_kcp_client.c @@ -1,6 +1,7 @@ #include "peer_kcp_client.h" #include +#include struct kcp_client { char id[OMNI_MAX_PEER_ID]; @@ -80,6 +81,7 @@ kcp_client_t *kcp_client_dial(const char *server_addr, const char *dial_addr, co kcp_client_t *client; const char *actual_dial_addr = (dial_addr != NULL && dial_addr[0] != '\0') ? dial_addr : server_addr; message_t register_msg; + int saved_errno = 0; client = (kcp_client_t *) calloc(1, sizeof(*client)); if (client == NULL) { @@ -91,7 +93,9 @@ kcp_client_t *kcp_client_dial(const char *server_addr, const char *dial_addr, co client->logger = logger; client->conn = kcp_conn_dial(actual_dial_addr, bind_ip, bind_device, packet_logger, logger, OMNI_NODE_ROLE_PEER, peer_id, stats_logger, stats_interval_ms); if (client->conn == NULL) { + saved_errno = errno; kcp_client_free(client); + errno = saved_errno; return NULL; } @@ -101,7 +105,9 @@ kcp_client_t *kcp_client_dial(const char *server_addr, const char *dial_addr, co snprintf(register_msg.from, sizeof(register_msg.from), "%s", peer_id); snprintf(register_msg.to, sizeof(register_msg.to), "%s", SERVER_PEER_ID); if (kcp_conn_send(client->conn, ®ister_msg) != 0) { + saved_errno = errno; kcp_client_free(client); + errno = saved_errno; return NULL; } return client; diff --git a/c/src/transport_kcp.c b/c/src/transport_kcp.c index 3eb5e43..6967698 100644 --- a/c/src/transport_kcp.c +++ b/c/src/transport_kcp.c @@ -766,6 +766,7 @@ static void *kcp_socket_debug_errqueue_thread(void *arg) { } static int kcp_socket_debug_init(kcp_socket_debug_state_t *state, int fd, kcp_packet_debug_logger_t *logger, const char *node_role, const char *node_id) { + int thread_rc; memset(state, 0, sizeof(*state)); state->fd = fd; state->logger = logger; @@ -779,7 +780,9 @@ static int kcp_socket_debug_init(kcp_socket_debug_state_t *state, int fd, kcp_pa pthread_mutex_destroy(&state->pending_mu); return -1; } - if (pthread_create(&state->errqueue_thread, NULL, kcp_socket_debug_errqueue_thread, state) != 0) { + thread_rc = pthread_create(&state->errqueue_thread, NULL, kcp_socket_debug_errqueue_thread, state); + if (thread_rc != 0) { + errno = thread_rc; pthread_mutex_destroy(&state->write_mu); pthread_mutex_destroy(&state->pending_mu); return -1; @@ -1202,6 +1205,7 @@ kcp_conn_t *kcp_conn_dial(const char *server_addr, const char *bind_ip, const ch int fd = kcp_socket_open_dial(server_addr, bind_ip, bind_device, &remote_addr, &remote_len, &family); kcp_conn_t *conn; kcp_socket_debug_state_t *sock_state; + int thread_rc; (void) family; if (fd < 0) { return NULL; @@ -1225,7 +1229,9 @@ kcp_conn_t *kcp_conn_dial(const char *server_addr, const char *bind_ip, const ch } conn->is_client = 1; conn->owns_socket = 1; - if (pthread_create(&conn->recv_thread, NULL, kcp_client_recv_thread_main, conn) != 0) { + thread_rc = pthread_create(&conn->recv_thread, NULL, kcp_client_recv_thread_main, conn); + if (thread_rc != 0) { + errno = thread_rc; kcp_conn_free(conn); return NULL; }