X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fnetwork.c;h=64c6d24b2f4e187c073f70939c9f5b678af71bd0;hb=ffd3d91a3523381554d2199d97cb0fa538d1985b;hp=0fdb1c0e243f92a09cb785e62deec5c3a64f78ae;hpb=55dcf13791059739dbbba11c7aaaabcf807ae2a3;p=collectd.git diff --git a/src/network.c b/src/network.c index 0fdb1c0e..64c6d24b 100644 --- a/src/network.c +++ b/src/network.c @@ -1701,19 +1701,19 @@ static int network_bind_socket_to_addr(sockent_t *se, DEBUG("network_plugin: binding client socket to ipv4 address: %s", pbuffer); if (bind(se->data.client.fd, (struct sockaddr *)addr, sizeof(*addr)) == -1) { - ERROR("network_plugin: failed to bind client socket (ipv4): %s", - STRERRNO); + ERROR("network plugin: failed to bind client socket (ipv4) to %s: %s", + pbuffer, STRERRNO); return -1; } } else if (ai->ai_family == AF_INET6) { struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(se->data.client.bind_addr); - inet_ntop(AF_INET, &(addr->sin6_addr), pbuffer, 64); + inet_ntop(AF_INET6, &(addr->sin6_addr), pbuffer, 64); DEBUG("network_plugin: binding client socket to ipv6 address: %s", pbuffer); if (bind(se->data.client.fd, (struct sockaddr *)addr, sizeof(*addr)) == -1) { - ERROR("network_plugin: failed to bind client socket (ipv6): %s", - STRERRNO); + ERROR("network plugin: failed to bind client socket (ipv6) to %s: %s", + pbuffer, STRERRNO); return -1; } } @@ -1728,10 +1728,9 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, #else int loop = 0; #endif - int yes = 1; /* allow multiple sockets to use the same PORT number */ - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) == -1) { + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) == -1) { ERROR("network plugin: setsockopt (reuseaddr): %s", STRERRNO); return -1; } @@ -2738,13 +2737,13 @@ network_config_set_bind_address(const oconfig_item_t *ci, return -1; int ret; - struct addrinfo hint, *res = NULL; - - memset(&hint, '\0', sizeof hint); - hint.ai_family = PF_UNSPEC; - hint.ai_flags = AI_NUMERICHOST; + struct addrinfo *res = NULL; + struct addrinfo ai_hints = {.ai_family = AF_UNSPEC, + .ai_flags = AI_NUMERICHOST, + .ai_protocol = IPPROTO_UDP, + .ai_socktype = SOCK_DGRAM}; - ret = getaddrinfo(addr_text, NULL, &hint, &res); + ret = getaddrinfo(addr_text, NULL, &ai_hints, &res); if (ret) { ERROR("network plugin: Bind address option has invalid address set: %s", gai_strerror(ret)); @@ -2752,6 +2751,10 @@ network_config_set_bind_address(const oconfig_item_t *ci, } *bind_address = malloc(sizeof(**bind_address)); + if (*bind_address == NULL) { + ERROR("network plugin: network_config_set_bind_address: malloc failed."); + return -1; + } (*bind_address)->ss_family = res->ai_family; if (res->ai_family == AF_INET) { struct sockaddr_in *addr = (struct sockaddr_in *)(*bind_address); @@ -2763,9 +2766,11 @@ network_config_set_bind_address(const oconfig_item_t *ci, ERROR("network plugin: %s is an unknown address format %d\n", addr_text, res->ai_family); sfree(*bind_address); + freeaddrinfo(res); return -1; } + freeaddrinfo(res); return 0; } /* int network_config_set_bind_address */