Commit c726c9de78c918ca47aafce6c2a466cb5218f690

Authored by Stéphane Raimbault
1 parent 515960cc

Fix connection check for Windows RTU (closes #660, #662)

src/modbus-private.h
@@ -86,6 +86,7 @@ typedef struct _modbus_backend { @@ -86,6 +86,7 @@ typedef struct _modbus_backend {
86 const uint8_t *rsp, 86 const uint8_t *rsp,
87 int rsp_length); 87 int rsp_length);
88 int (*connect)(modbus_t *ctx); 88 int (*connect)(modbus_t *ctx);
  89 + unsigned int (*is_connected)(modbus_t *ctx);
89 void (*close)(modbus_t *ctx); 90 void (*close)(modbus_t *ctx);
90 int (*flush)(modbus_t *ctx); 91 int (*flush)(modbus_t *ctx);
91 int (*select)(modbus_t *ctx, fd_set *rset, struct timeval *tv, int msg_length); 92 int (*select)(modbus_t *ctx, fd_set *rset, struct timeval *tv, int msg_length);
src/modbus-rtu.c
@@ -725,6 +725,19 @@ static int _modbus_rtu_connect(modbus_t *ctx) @@ -725,6 +725,19 @@ static int _modbus_rtu_connect(modbus_t *ctx)
725 return 0; 725 return 0;
726 } 726 }
727 727
  728 +// FIXME Temporary solution before rewriting Windows RTU backend
  729 +static unsigned int _modbus_rtu_is_connected(modbus_t *ctx)
  730 +{
  731 +#if defined(_WIN32)
  732 + modbus_rtu_t *ctx_rtu = ctx->backend_data;
  733 +
  734 + /* Check if file handle is valid */
  735 + return ctx_rtu->w_ser.fd != INVALID_HANDLE_VALUE;
  736 +#else
  737 + return ctx->s >= 0;
  738 +#endif
  739 +}
  740 +
728 int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode) 741 int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode)
729 { 742 {
730 if (ctx == NULL) { 743 if (ctx == NULL) {
@@ -1043,6 +1056,7 @@ const modbus_backend_t _modbus_rtu_backend = { @@ -1043,6 +1056,7 @@ const modbus_backend_t _modbus_rtu_backend = {
1043 _modbus_rtu_check_integrity, 1056 _modbus_rtu_check_integrity,
1044 _modbus_rtu_pre_check_confirmation, 1057 _modbus_rtu_pre_check_confirmation,
1045 _modbus_rtu_connect, 1058 _modbus_rtu_connect,
  1059 + _modbus_rtu_is_connected,
1046 _modbus_rtu_close, 1060 _modbus_rtu_close,
1047 _modbus_rtu_flush, 1061 _modbus_rtu_flush,
1048 _modbus_rtu_select, 1062 _modbus_rtu_select,
src/modbus-tcp.c
@@ -449,6 +449,11 @@ static int _modbus_tcp_pi_connect(modbus_t *ctx) @@ -449,6 +449,11 @@ static int _modbus_tcp_pi_connect(modbus_t *ctx)
449 return 0; 449 return 0;
450 } 450 }
451 451
  452 +static unsigned int _modbus_tcp_is_connected(modbus_t *ctx)
  453 +{
  454 + return ctx->s >= 0;
  455 +}
  456 +
452 /* Closes the network connection and socket in TCP mode */ 457 /* Closes the network connection and socket in TCP mode */
453 static void _modbus_tcp_close(modbus_t *ctx) 458 static void _modbus_tcp_close(modbus_t *ctx)
454 { 459 {
@@ -816,6 +821,7 @@ const modbus_backend_t _modbus_tcp_backend = { @@ -816,6 +821,7 @@ const modbus_backend_t _modbus_tcp_backend = {
816 _modbus_tcp_check_integrity, 821 _modbus_tcp_check_integrity,
817 _modbus_tcp_pre_check_confirmation, 822 _modbus_tcp_pre_check_confirmation,
818 _modbus_tcp_connect, 823 _modbus_tcp_connect,
  824 + _modbus_tcp_is_connected,
819 _modbus_tcp_close, 825 _modbus_tcp_close,
820 _modbus_tcp_flush, 826 _modbus_tcp_flush,
821 _modbus_tcp_select, 827 _modbus_tcp_select,
@@ -838,6 +844,7 @@ const modbus_backend_t _modbus_tcp_pi_backend = { @@ -838,6 +844,7 @@ const modbus_backend_t _modbus_tcp_pi_backend = {
838 _modbus_tcp_check_integrity, 844 _modbus_tcp_check_integrity,
839 _modbus_tcp_pre_check_confirmation, 845 _modbus_tcp_pre_check_confirmation,
840 _modbus_tcp_pi_connect, 846 _modbus_tcp_pi_connect,
  847 + _modbus_tcp_is_connected,
841 _modbus_tcp_close, 848 _modbus_tcp_close,
842 _modbus_tcp_flush, 849 _modbus_tcp_flush,
843 _modbus_tcp_select, 850 _modbus_tcp_select,
src/modbus.c
No preview for this file type