Index: net/udp/udp_socket_libevent.cc |
diff --git a/net/udp/udp_socket_libevent.cc b/net/udp/udp_socket_libevent.cc |
index beb1dcaf87d896064cf6f4ce8220442b94f31a18..a879ecb54da1c7719e8aad8bcb893f8e4f2cd014 100644 |
--- a/net/udp/udp_socket_libevent.cc |
+++ b/net/udp/udp_socket_libevent.cc |
@@ -465,16 +465,20 @@ int UDPSocketLibevent::SetSocketOptions() { |
sizeof(true_value)); |
if (rv < 0) |
return MapSystemError(errno); |
-#if defined(SO_REUSEPORT) |
+ } |
+ if (socket_options_ & SOCKET_OPTION_BROADCAST) { |
+ int rv; |
+#if defined(OS_MACOSX) |
+ // SO_REUSEPORT on OSX permits multiple processes to each receive |
+ // UDP multicast or broadcast datagrams destined for the bound |
+ // port. |
rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &true_value, |
sizeof(true_value)); |
if (rv < 0) |
return MapSystemError(errno); |
-#endif |
- } |
- if (socket_options_ & SOCKET_OPTION_BROADCAST) { |
- int rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &true_value, |
- sizeof(true_value)); |
+#endif // defined(OS_MACOSX) |
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &true_value, |
+ sizeof(true_value)); |
if (rv < 0) |
return MapSystemError(errno); |
} |