diff --git a/Makefile b/Makefile index 03c2e3e..81e25a5 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ # # Makefile for tinysvcmdns # +CPPFLAGS += -DPTHREAD_CREATE_DETACHED_SUPPORTED CFLAGS += -Wall -pedantic -std=gnu99 CFLAGS += -g diff --git a/mdnsd.c b/mdnsd.c index bfde20a..ae6303e 100644 --- a/mdnsd.c +++ b/mdnsd.c @@ -511,20 +511,27 @@ static int create_recv_sock(int domain) } int on = 1; - if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on))) < 0) { + if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) < 0) { close(sd); log_message(LOG_ERR, "recv setsockopt(SO_REUSEADDR): %s\n", strerror(errno)); return r; } #if !defined(WIN32) && defined(SO_REUSEPORT) - if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, &addrlen)) { - if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, sizeof(on))) < 0) { + if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, &addrlen)) { + if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on))) < 0) { log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %d; %s\n", r, strerror(errno)); } } #endif + // (issue #5 Tinysvcmdns invisible from chrome app mdns-browser) + // TTL -> 255 in case receivers demand it (unrouted pkt) + int ttl = 255; + if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl))) < 0) { + log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_IP): %s", strerror(errno)); + return r; + } /* bind to an address */ struct sockaddr_in serveraddr = {0}; @@ -539,7 +546,7 @@ static int create_recv_sock(int domain) DECL_ZERO_STRUCT(mreq, ip_mreq); mreq.imr_interface.s_addr = htonl(INADDR_ANY); mreq.imr_multiaddr.s_addr = inet_addr(addr); - if ((r = setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(mreq))) < 0) { + if ((r = setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq))) < 0) { close(sd); log_message(LOG_ERR, "recv setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno)); return r; @@ -552,7 +559,7 @@ static int create_recv_sock(int domain) // disable loopback int flag = 0; #endif - if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&flag, sizeof(flag))) < 0) { + if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, &flag, sizeof(flag))) < 0) { close(sd); log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_LOOP): %s\n", strerror(errno)); return r; @@ -560,7 +567,7 @@ static int create_recv_sock(int domain) #ifdef IP_PKTINFO - if ((r = setsockopt(sd, SOL_IP, IP_PKTINFO, (char *) &on, sizeof(on))) < 0) { + if ((r = setsockopt(sd, SOL_IP, IP_PKTINFO, &on, sizeof(on))) < 0) { close(sd); log_message(LOG_ERR, "recv setsockopt(IP_PKTINFO): %s\n", strerror(errno)); return r; @@ -1636,6 +1643,7 @@ static const char * flags(int sd, const char * name) } */ +#ifndef HAVE_NETLIB_GET_IPV4ADDR int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) { int result = -1; int sd; @@ -1669,6 +1677,7 @@ int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) { close(sd); return result; } +#endif static int mdnsd_set_host_info_by_netif(struct mdnsd *svr, const char *hostname, const char *netif_nameOrAddress) {