Commit 05efa1f7dd327a1895d8585e9bed9f7aa9cdf68a
1 parent
0c36a6e7
Fix compilation of TCP PI on Windows
- removed ENOTCONN errno not supported - set WINVER to Windows XP (and above) and add ws2_32.dll. So older Windows versions aren't supported.
Showing
2 changed files
with
12 additions
and
3 deletions
configure.ac
| ... | ... | @@ -114,6 +114,13 @@ if test "x$GCC" = "xyes"; then |
| 114 | 114 | esac |
| 115 | 115 | fi |
| 116 | 116 | |
| 117 | +# Required for getaddrinfo (TCP PI - IPv6) | |
| 118 | +AC_CHECK_HEADERS([winsock2.h], HAVE_WINSOCK2_H=yes) | |
| 119 | +if test "x$HAVE_WINSOCK2_H" = "xyes"; then | |
| 120 | + LIBS="$LIBS -lws2_32" | |
| 121 | + AC_SUBST(LIBS) | |
| 122 | +fi | |
| 123 | + | |
| 117 | 124 | AC_CONFIG_FILES([ |
| 118 | 125 | Makefile |
| 119 | 126 | src/Makefile | ... | ... |
src/modbus-tcp.c
| ... | ... | @@ -25,7 +25,11 @@ |
| 25 | 25 | |
| 26 | 26 | #if defined(_WIN32) |
| 27 | 27 | # define OS_WIN32 |
| 28 | -# include <winsock2.h> | |
| 28 | +/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later. | |
| 29 | + * minwg32 headers check WINVER before allowing the use of these */ | |
| 30 | +# ifndef WINVER | |
| 31 | +# define WINVER 0x0501 | |
| 32 | +# endif | |
| 29 | 33 | # include <ws2tcpip.h> |
| 30 | 34 | # define SHUT_RDWR 2 |
| 31 | 35 | # define close closesocket |
| ... | ... | @@ -304,7 +308,6 @@ static int _modbus_tcp_pi_connect(modbus_t *ctx) |
| 304 | 308 | freeaddrinfo(ai_list); |
| 305 | 309 | |
| 306 | 310 | if (ctx->s < 0) { |
| 307 | - errno = ENOTCONN; | |
| 308 | 311 | return -1; |
| 309 | 312 | } |
| 310 | 313 | |
| ... | ... | @@ -480,7 +483,6 @@ int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection) |
| 480 | 483 | freeaddrinfo(ai_list); |
| 481 | 484 | |
| 482 | 485 | if (new_socket < 0) { |
| 483 | - errno = ENOTCONN; | |
| 484 | 486 | return -1; |
| 485 | 487 | } |
| 486 | 488 | ... | ... |