Merge IP-TTL-255-patch, fixing #13 Set multicast IP TTL to 255 in case a receiver demands an unrouted packet; minor non-functional tweaks.
This commit is contained in:
1
Makefile
1
Makefile
@@ -1,6 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Makefile for tinysvcmdns
|
# Makefile for tinysvcmdns
|
||||||
#
|
#
|
||||||
|
CPPFLAGS += -DPTHREAD_CREATE_DETACHED_SUPPORTED
|
||||||
|
|
||||||
CFLAGS += -Wall -pedantic -std=gnu99
|
CFLAGS += -Wall -pedantic -std=gnu99
|
||||||
CFLAGS += -g
|
CFLAGS += -g
|
||||||
|
|||||||
21
mdnsd.c
21
mdnsd.c
@@ -511,20 +511,27 @@ static int create_recv_sock(int domain)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int on = 1;
|
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);
|
close(sd);
|
||||||
log_message(LOG_ERR, "recv setsockopt(SO_REUSEADDR): %s\n", strerror(errno));
|
log_message(LOG_ERR, "recv setsockopt(SO_REUSEADDR): %s\n", strerror(errno));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(WIN32) && defined(SO_REUSEPORT)
|
#if !defined(WIN32) && defined(SO_REUSEPORT)
|
||||||
if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, &addrlen)) {
|
if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, &addrlen)) {
|
||||||
if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, sizeof(on))) < 0) {
|
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));
|
log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %d; %s\n", r, strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#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 */
|
/* bind to an address */
|
||||||
struct sockaddr_in serveraddr = {0};
|
struct sockaddr_in serveraddr = {0};
|
||||||
@@ -539,7 +546,7 @@ static int create_recv_sock(int domain)
|
|||||||
DECL_ZERO_STRUCT(mreq, ip_mreq);
|
DECL_ZERO_STRUCT(mreq, ip_mreq);
|
||||||
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
|
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
|
||||||
mreq.imr_multiaddr.s_addr = inet_addr(addr);
|
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);
|
close(sd);
|
||||||
log_message(LOG_ERR, "recv setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno));
|
log_message(LOG_ERR, "recv setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno));
|
||||||
return r;
|
return r;
|
||||||
@@ -552,7 +559,7 @@ static int create_recv_sock(int domain)
|
|||||||
// disable loopback
|
// disable loopback
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
#endif
|
#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);
|
close(sd);
|
||||||
log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_LOOP): %s\n", strerror(errno));
|
log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_LOOP): %s\n", strerror(errno));
|
||||||
return r;
|
return r;
|
||||||
@@ -560,7 +567,7 @@ static int create_recv_sock(int domain)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef IP_PKTINFO
|
#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);
|
close(sd);
|
||||||
log_message(LOG_ERR, "recv setsockopt(IP_PKTINFO): %s\n", strerror(errno));
|
log_message(LOG_ERR, "recv setsockopt(IP_PKTINFO): %s\n", strerror(errno));
|
||||||
return r;
|
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 netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) {
|
||||||
int result = -1;
|
int result = -1;
|
||||||
int sd;
|
int sd;
|
||||||
@@ -1669,6 +1677,7 @@ int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) {
|
|||||||
close(sd);
|
close(sd);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int mdnsd_set_host_info_by_netif(struct mdnsd *svr, const char *hostname, const char *netif_nameOrAddress)
|
static int mdnsd_set_host_info_by_netif(struct mdnsd *svr, const char *hostname, const char *netif_nameOrAddress)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user