Commit 5a6efecf78112f2e882473e6610c9b1f2e1cdada
1 parent
f807767f
Replace inet_addr by inet_pton calls
Showing
1 changed file
with
21 additions
and
2 deletions
src/modbus-tcp.c
| @@ -351,7 +351,16 @@ static int _modbus_tcp_connect(modbus_t *ctx) | @@ -351,7 +351,16 @@ static int _modbus_tcp_connect(modbus_t *ctx) | ||
| 351 | 351 | ||
| 352 | addr.sin_family = AF_INET; | 352 | addr.sin_family = AF_INET; |
| 353 | addr.sin_port = htons(ctx_tcp->port); | 353 | addr.sin_port = htons(ctx_tcp->port); |
| 354 | - addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip); | 354 | + rc = inet_pton(addr.sin_family, ctx_tcp->ip, &(addr.sin_addr)); |
| 355 | + if (rc <= 0) { | ||
| 356 | + if (ctx->debug) { | ||
| 357 | + fprintf(stderr, "Invalid IP address: %s\n", ctx_tcp->ip); | ||
| 358 | + } | ||
| 359 | + close(ctx->s); | ||
| 360 | + ctx->s = -1; | ||
| 361 | + return -1; | ||
| 362 | + } | ||
| 363 | + | ||
| 355 | rc = | 364 | rc = |
| 356 | _connect(ctx->s, (struct sockaddr *) &addr, sizeof(addr), &ctx->response_timeout); | 365 | _connect(ctx->s, (struct sockaddr *) &addr, sizeof(addr), &ctx->response_timeout); |
| 357 | if (rc == -1) { | 366 | if (rc == -1) { |
| @@ -495,6 +504,7 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) | @@ -495,6 +504,7 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) | ||
| 495 | int flags; | 504 | int flags; |
| 496 | struct sockaddr_in addr; | 505 | struct sockaddr_in addr; |
| 497 | modbus_tcp_t *ctx_tcp; | 506 | modbus_tcp_t *ctx_tcp; |
| 507 | + int rc; | ||
| 498 | 508 | ||
| 499 | if (ctx == NULL) { | 509 | if (ctx == NULL) { |
| 500 | errno = EINVAL; | 510 | errno = EINVAL; |
| @@ -536,8 +546,17 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) | @@ -536,8 +546,17 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) | ||
| 536 | addr.sin_addr.s_addr = htonl(INADDR_ANY); | 546 | addr.sin_addr.s_addr = htonl(INADDR_ANY); |
| 537 | } else { | 547 | } else { |
| 538 | /* Listen only specified IP address */ | 548 | /* Listen only specified IP address */ |
| 539 | - addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip); | 549 | + rc = inet_pton(addr.sin_family, ctx_tcp->ip, &(addr.sin_addr)); |
| 550 | + if (rc <= 0) { | ||
| 551 | + if (ctx->debug) { | ||
| 552 | + fprintf(stderr, "Invalid IP address: %s\n", ctx_tcp->ip); | ||
| 553 | + } | ||
| 554 | + close(ctx->s); | ||
| 555 | + ctx->s = -1; | ||
| 556 | + return -1; | ||
| 557 | + } | ||
| 540 | } | 558 | } |
| 559 | + | ||
| 541 | if (bind(new_s, (struct sockaddr *) &addr, sizeof(addr)) == -1) { | 560 | if (bind(new_s, (struct sockaddr *) &addr, sizeof(addr)) == -1) { |
| 542 | close(new_s); | 561 | close(new_s); |
| 543 | return -1; | 562 | return -1; |