diff --git a/src/etcp_connections.c b/src/etcp_connections.c index 727544d2..1d208f00 100644 --- a/src/etcp_connections.c +++ b/src/etcp_connections.c @@ -748,8 +748,9 @@ void etcp_socket_remove(struct ETCP_SOCKET* conn) { size_t i = 0; while (i < conn->num_channels) { struct ETCP_LINK* l = conn->links[i]; - etcp_link_close(l); // теперь безопасно — num_channels уменьшится, но i не растёт - // i НЕ инкрементируем — сдвиг уже сделал remove_link + int had_conn = (l->conn != NULL); + etcp_link_close(l); + if (!had_conn) i++; } u_free(conn->links); diff --git a/src/route_bgp.c b/src/route_bgp.c index 122b4ab9..174c0934 100644 --- a/src/route_bgp.c +++ b/src/route_bgp.c @@ -1122,7 +1122,12 @@ void route_bgp_send_nat_info(struct ETCP_CONN* conn, uint8_t socket_id, uint32_t conn->log_name, socket_id, nat_type == NAT_TYPE_EIM ? "EIM" : "STRICT", ip_to_str(pkt->nat_ip, AF_INET).str, (unsigned)nat_port); - etcp_send(conn, e); + int ret = etcp_send(conn, e); + if (ret != 0) { + DEBUG_ERROR(DEBUG_CATEGORY_BGP, "etcp_send NAT_INFO failed: %d", ret); + u_free(pkt); + queue_entry_free(e); + } } void route_bgp_send_nat_check_req(struct ETCP_CONN* conn, uint8_t socket_id) { @@ -1157,7 +1162,12 @@ void route_bgp_send_nat_check_req(struct ETCP_CONN* conn, uint8_t socket_id) { conn->log_name, socket_id, ip_to_str(&pkt->interface_ip, AF_INET).str, (unsigned)ntohs(pkt->interface_port)); - etcp_send(conn, e); + int ret = etcp_send(conn, e); + if (ret != 0) { + DEBUG_ERROR(DEBUG_CATEGORY_BGP, "etcp_send NAT_CHECK_REQ failed: %d", ret); + u_free(pkt); + queue_entry_free(e); + } } void route_bgp_request_nat_check_all(struct ROUTE_BGP* bgp) {