From 7570e01f004cf1ea348ecc4dd4252974ad76bc64 Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 22 Jan 2026 03:21:54 +0000 Subject: [PATCH] simulator: close fd --- include/neuron/connection/neu_connection.h | 1 + simulator/modbus_simulator.c | 6 ++++++ src/connection/connection.c | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/include/neuron/connection/neu_connection.h b/include/neuron/connection/neu_connection.h index fff4148b..1e9f855b 100644 --- a/include/neuron/connection/neu_connection.h +++ b/include/neuron/connection/neu_connection.h @@ -305,5 +305,6 @@ int is_ipv6(const char *ip); bool neu_conn_is_connected(neu_conn_t *conn); uint16_t neu_conn_udp_act_port(neu_conn_t *conn); +bool conn_tcp_server_is_listen(neu_conn_t *conn); #endif diff --git a/simulator/modbus_simulator.c b/simulator/modbus_simulator.c index 09ef3b07..a7996635 100644 --- a/simulator/modbus_simulator.c +++ b/simulator/modbus_simulator.c @@ -90,6 +90,7 @@ static void sig_handler(int sig) for (uint32_t i = 0; i < sizeof(c_events) / sizeof(struct client_event); i++) { if (c_events[i].fd > 0) { + close(c_events[i].fd); neu_event_del_io(events, c_events[i].client); } } @@ -149,6 +150,11 @@ int main(int argc, char *argv[]) events = neu_event_new("modbus_simulator"); conn = neu_conn_new(¶m, NULL, connected, disconnected); + while (conn_tcp_server_is_listen(conn) == false) { + neu_msleep(1000); + neu_conn_destory(conn); + conn = neu_conn_new(¶m, NULL, connected, disconnected); + } signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); diff --git a/src/connection/connection.c b/src/connection/connection.c index f4d05860..b37041e3 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -732,6 +732,11 @@ static void conn_init_param(neu_conn_t *conn, neu_conn_param_t *param) } } +bool conn_tcp_server_is_listen(neu_conn_t *conn) +{ + return conn->tcp_server.is_listen; +} + static void conn_tcp_server_listen(neu_conn_t *conn) { if (conn->param.type == NEU_CONN_TCP_SERVER &&