X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fserver.c;h=26876162dad88258d0da07f4b245e12dc1038b47;hb=7c9d772c992647fcba64a96800c146eb9f1647f8;hp=50f6be1dfec169f4aa8e7f293db94d49f6d1fd96;hpb=98d25510a339e789c27ee234558476b04185bd51;p=collectd.git diff --git a/src/libcollectdclient/server.c b/src/libcollectdclient/server.c index 50f6be1d..26876162 100644 --- a/src/libcollectdclient/server.c +++ b/src/libcollectdclient/server.c @@ -23,10 +23,12 @@ * Florian octo Forster **/ -#if HAVE_CONFIG_H -#include "config.h" +#ifdef WIN32 +#include "gnulib_config.h" #endif +#include "config.h" + #if !defined(__GNUC__) || !__GNUC__ #define __attribute__(x) /**/ #endif @@ -35,18 +37,27 @@ #include "collectd/network_parse.h" /* for lcc_network_parse_options_t */ #include "collectd/server.h" +// clang-format off #include -#include -#include +#include #include +#include #include #include -#include +#include +#include +#include +// clang-format on #include #define DEBUG(...) printf(__VA_ARGS__) -static _Bool is_multicast(struct addrinfo const *ai) { +#ifdef WIN32 +#include +#define AI_ADDRCONFIG 0 +#endif + +static bool is_multicast(struct addrinfo const *ai) { if (ai->ai_family == AF_INET) { struct sockaddr_in *addr = (struct sockaddr_in *)ai->ai_addr; return IN_MULTICAST(ntohl(addr->sin_addr.s_addr)); @@ -79,13 +90,20 @@ static int server_multicast_join(lcc_listener_t *srv, struct ip_mreqn mreq = { .imr_address.s_addr = INADDR_ANY, .imr_multiaddr.s_addr = sa->sin_addr.s_addr, - .imr_ifindex = if_nametoindex(srv->interface), + .imr_ifindex = if_nametoindex(srv->iface), + }; +#else +#ifdef WIN32 + struct ip_mreq mreq = { + .imr_interface.s_addr = INADDR_ANY, + .imr_multiaddr.s_addr = sa->sin_addr.s_addr, }; #else struct ip_mreq mreq = { .imr_address.s_addr = INADDR_ANY, .imr_multiaddr.s_addr = sa->s_addr, }; -#endif +#endif /* WIN32 */ +#endif /* HAVE_STRUCT_IP_MREQN_IMR_IFINDEX */ status = setsockopt(srv->conn, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); if (status == -1) @@ -104,11 +122,11 @@ static int server_multicast_join(lcc_listener_t *srv, return errno; struct ipv6_mreq mreq6 = { - .ipv6mr_interface = if_nametoindex(srv->interface), + .ipv6mr_interface = if_nametoindex(srv->iface), }; memmove(&mreq6.ipv6mr_multiaddr, &sa->sin6_addr, sizeof(struct in6_addr)); - status = setsockopt(srv->conn, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq6, + status = setsockopt(srv->conn, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq6, sizeof(mreq6)); if (status == -1) return errno; @@ -176,7 +194,7 @@ static int server_open(lcc_listener_t *srv) { } int lcc_listen_and_write(lcc_listener_t srv) { - _Bool close_socket = 0; + bool close_socket = 0; if (srv.conn < 0) { int status = server_open(&srv);