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
|
||||
#
|
||||
CPPFLAGS += -DPTHREAD_CREATE_DETACHED_SUPPORTED
|
||||
|
||||
CFLAGS += -Wall -pedantic -std=gnu99
|
||||
CFLAGS += -g
|
||||
|
||||
21
mdnsd.c
21
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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user