aboutsummaryrefslogtreecommitdiff
path: root/src/socket.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-11-22 10:26:38 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-11-22 10:26:38 +0000
commitccfc7f253d900f1c3209ba89fb7d5e893ea38341 (patch)
tree641b96ecc711f74c16f50545832d34b57a51a604 /src/socket.c
parent0d337b5382f3521216c3dfd30fcde4f5bcdffd02 (diff)
parent4657a267ebfc30ceca45f82a281f405a09870b4e (diff)
downloadslirp-ccfc7f253d900f1c3209ba89fb7d5e893ea38341.zip
slirp-ccfc7f253d900f1c3209ba89fb7d5e893ea38341.tar.gz
slirp-ccfc7f253d900f1c3209ba89fb7d5e893ea38341.tar.bz2
Merge branch 'broadcast' into 'master'
Make host receive broadcast packets Closes #9 See merge request slirp/libslirp!15
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/socket.c b/src/socket.c
index 2f20028..bc6ee47 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -846,6 +846,9 @@ int sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
} else {
sin->sin_addr = loopback_addr;
}
+ } else if (!slirp->disable_host_loopback && so->so_faddr.s_addr == 0xffffffff) {
+ /* Receive broadcast as well */
+ sin->sin_addr = loopback_addr;
}
break;
case AF_INET6:
@@ -865,6 +868,9 @@ int sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
} else {
sin6->sin6_addr = in6addr_loopback;
}
+ } else if (!slirp->disable_host_loopback
+ && in6_equal(&so->so_faddr6, &(struct in6_addr) ALLNODES_MULTICAST)) {
+ sin6->sin6_addr = in6addr_loopback;
}
break;