Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
bazel-toolbelt
_deps
build
4 changes: 2 additions & 2 deletions MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion toolbelt/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ cc_test(
)
cc_test(
name = "pipe_test",
size = "small",
size = "medium",
srcs = ["pipe_test.cc"],
deps = [
":toolbelt",
Expand Down
16 changes: 10 additions & 6 deletions toolbelt/sockets.cc
Original file line number Diff line number Diff line change
Expand Up @@ -799,9 +799,13 @@ absl::Status UDPSocket::Bind(const InetAddress &addr) {
}

absl::Status UDPSocket::JoinMulticastGroup(const InetAddress &addr) {
ip_mreqn membership_request{.imr_multiaddr = addr.GetAddress().sin_addr,
.imr_address = {INADDR_ANY},
.imr_ifindex = 0};
// Use POSIX-portable ip_mreq instead of Linux-specific ip_mreqn so this
// builds on macOS, BSDs and QNX as well. We always join via the default
// interface (INADDR_ANY); callers needing per-interface control should
// extend this API.
struct ip_mreq membership_request = {};
membership_request.imr_multiaddr = addr.GetAddress().sin_addr;
membership_request.imr_interface.s_addr = htonl(INADDR_ANY);
int setsockopt_ret =
::setsockopt(fd_.Fd(), IPPROTO_IP, IP_ADD_MEMBERSHIP, &membership_request,
sizeof(membership_request));
Expand All @@ -815,9 +819,9 @@ absl::Status UDPSocket::JoinMulticastGroup(const InetAddress &addr) {
}

absl::Status UDPSocket::LeaveMulticastGroup(const InetAddress &addr) {
ip_mreqn membership_request{.imr_multiaddr = addr.GetAddress().sin_addr,
.imr_address = {INADDR_ANY},
.imr_ifindex = 0};
struct ip_mreq membership_request = {};
membership_request.imr_multiaddr = addr.GetAddress().sin_addr;
membership_request.imr_interface.s_addr = htonl(INADDR_ANY);
int setsockopt_ret =
::setsockopt(fd_.Fd(), IPPROTO_IP, IP_DROP_MEMBERSHIP,
&membership_request, sizeof(membership_request));
Expand Down
2 changes: 1 addition & 1 deletion toolbelt/sockets.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
// Older systems may not have the header file.
#if !HAS_VM_SOCKETS
struct sockaddr_vm {
#if defined(_APPLE__)
#if defined(__APPLE__)
uint8_t svm_len; /* total length of sockaddr */
#endif
sa_family_t svm_family; /* AF_VSOCK */
Expand Down