diff --git a/plugins/modbus/modbus_point.c b/plugins/modbus/modbus_point.c index 715ef93c..5152b9b9 100644 --- a/plugins/modbus/modbus_point.c +++ b/plugins/modbus/modbus_point.c @@ -47,7 +47,7 @@ int modbus_tag_to_point(neu_datatag_t *tag, modbus_point_t *point) char area = 0; int n = sscanf(tag->address, "%hhu!%c%hu", &point->slave_id, &area, &point->start_address); - if (n != 3) { + if (n != 3 || point->start_address == 0) { return NEU_ERR_TAG_ADDRESS_FORMAT_INVALID; } diff --git a/plugins/modbus/modbus_req.c b/plugins/modbus/modbus_req.c index 6367e5ce..35df4faf 100644 --- a/plugins/modbus/modbus_req.c +++ b/plugins/modbus/modbus_req.c @@ -43,7 +43,7 @@ void modbus_conn_disconnected(void *data, int fd) struct neu_plugin *plugin = (struct neu_plugin *) data; (void) fd; - plugin->common.link_state = NEU_NODE_LINK_STATE_CONNECTING; + plugin->common.link_state = NEU_NODE_LINK_STATE_DISCONNECTED; } int modbus_send_msg(void *ctx, uint16_t n_byte, uint8_t *bytes) diff --git a/plugins/modbus/modbus_tcp.c b/plugins/modbus/modbus_tcp.c index d84d5884..fbf6e01d 100644 --- a/plugins/modbus/modbus_tcp.c +++ b/plugins/modbus/modbus_tcp.c @@ -90,14 +90,14 @@ static int driver_init(neu_plugin_t *plugin) static int driver_uninit(neu_plugin_t *plugin) { - if (plugin->stack) { - modbus_stack_destroy(plugin->stack); - } - if (plugin->conn != NULL) { neu_conn_destory(plugin->conn); } + if (plugin->stack) { + modbus_stack_destroy(plugin->stack); + } + neu_event_close(plugin->events); plog_info(plugin, "node: modbus uninit ok"); diff --git a/src/connection/connection.c b/src/connection/connection.c index a5bf1119..ce19fb64 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -228,7 +228,11 @@ ssize_t neu_conn_send(neu_conn_t *conn, uint8_t *buf, ssize_t len) break; case NEU_CONN_TCP_CLIENT: case NEU_CONN_UDP: - ret = send(conn->fd, buf, len, MSG_NOSIGNAL | MSG_DONTWAIT); + if (conn->block) { + ret = send(conn->fd, buf, len, MSG_NOSIGNAL); + } else { + ret = send(conn->fd, buf, len, MSG_NOSIGNAL | MSG_DONTWAIT); + } break; case NEU_CONN_TTY_CLIENT: ret = write(conn->fd, buf, len); @@ -472,10 +476,14 @@ static void conn_tcp_server_stop(neu_conn_t *conn) for (int i = 0; i < conn->param.params.tcp_server.max_link; i++) { if (conn->tcp_server.clients[i].fd > 0) { close(conn->tcp_server.clients[i].fd); + conn->tcp_server.clients[i].fd = 0; } } - close(conn->fd); + if (conn->fd > 0) { + close(conn->fd); + conn->fd = 0; + } conn->tcp_server.is_listen = false; }