diff options
Diffstat (limited to 'www/chromium/files/patch-net_socket_udp__socket__posix.cc')
-rw-r--r-- | www/chromium/files/patch-net_socket_udp__socket__posix.cc | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/www/chromium/files/patch-net_socket_udp__socket__posix.cc b/www/chromium/files/patch-net_socket_udp__socket__posix.cc index 61a629e3f333..6516e22aaf92 100644 --- a/www/chromium/files/patch-net_socket_udp__socket__posix.cc +++ b/www/chromium/files/patch-net_socket_udp__socket__posix.cc @@ -1,15 +1,15 @@ ---- net/socket/udp_socket_posix.cc.orig 2018-01-04 21:05:56.000000000 +0100 -+++ net/socket/udp_socket_posix.cc 2018-01-21 13:53:16.974899000 +0100 -@@ -64,7 +64,7 @@ +--- net/socket/udp_socket_posix.cc.orig 2018-02-24 16:25:17.000000000 +0100 ++++ net/socket/udp_socket_posix.cc 2018-03-04 03:08:15.161087000 +0100 +@@ -69,7 +69,7 @@ const base::TimeDelta kActivityMonitorMsThreshold = base::TimeDelta::FromMilliseconds(100); --#if defined(OS_MACOSX) -+#if defined(OS_MACOSX) || defined(OS_BSD) +-#if defined(OS_MACOSX) || defined(OS_FUCHSIA) ++#if defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) - // Returns IPv4 address in network order. - int GetIPv4AddressFromIndex(int socket, uint32_t index, uint32_t* address) { -@@ -617,7 +617,7 @@ + // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS and Fuchsia + // require passing IPv4 address instead of interface index. This function +@@ -647,13 +647,16 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); int value = broadcast ? 1 : 0; int rv; @@ -18,26 +18,32 @@ // SO_REUSEPORT on OSX permits multiple processes to each receive // UDP multicast or broadcast datagrams destined for the bound // port. -@@ -830,7 +830,7 @@ + // This is only being set on OSX because its behavior is platform dependent + // and we are playing it safe by only setting it on platforms where things + // break. ++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)); ++ if (rv != 0) ++ return MapSystemError(errno); + rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value)); + if (rv != 0) + return MapSystemError(errno); +@@ -860,19 +863,24 @@ if (multicast_interface_ != 0) { switch (addr_family_) { case AF_INET: { --#if !defined(OS_MACOSX) -+#if !defined(OS_MACOSX) && !defined(OS_BSD) +-#if defined(OS_MACOSX) || defined(OS_FUCHSIA) ++#if defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) + ip_mreq mreq; + int error = GetIPv4AddressFromIndex(socket_, multicast_interface_, + &mreq.imr_interface.s_addr); + if (error != OK) + return error; +-#else // defined(OS_MACOSX) || defined(OS_FUCHSIA) ++#else // defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) ip_mreqn mreq; mreq.imr_ifindex = multicast_interface_; mreq.imr_address.s_addr = htonl(INADDR_ANY); -@@ -841,8 +841,20 @@ - if (error != OK) - return error; - #endif -+#if defined(OS_BSD) -+ int value = 1; -+ if (setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)) != 0) -+ return MapSystemError(errno); -+ if (setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value)) != 0) -+ return MapSystemError(errno); -+#endif + #endif // !defined(OS_MACOSX) && !defined(OS_FUCHSIA) int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF, +#if defined(OS_BSD) + reinterpret_cast<const char*>(&mreq.imr_interface.s_addr), @@ -48,12 +54,12 @@ if (rv) return MapSystemError(errno); break; -@@ -905,7 +917,7 @@ +@@ -934,7 +942,7 @@ if (addr_family_ != AF_INET) return ERR_ADDRESS_INVALID; --#if !defined(OS_MACOSX) -+#if !defined(OS_MACOSX) && !defined(OS_BSD) - ip_mreqn mreq; - mreq.imr_ifindex = multicast_interface_; - mreq.imr_address.s_addr = htonl(INADDR_ANY); +-#if defined(OS_MACOSX) || defined(OS_FUCHSIA) ++#if defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) + ip_mreq mreq; + int error = GetIPv4AddressFromIndex(socket_, multicast_interface_, + &mreq.imr_interface.s_addr); |