Index: net/udp/udp_server_socket.cc |
diff --git a/net/udp/udp_server_socket.cc b/net/udp/udp_server_socket.cc |
index 796c04da503bcda479c1822d68ce9e53173ee617..5874c5f82e038445a2d579e73e4bf84de21f79a1 100644 |
--- a/net/udp/udp_server_socket.cc |
+++ b/net/udp/udp_server_socket.cc |
@@ -4,6 +4,7 @@ |
#include "net/udp/udp_server_socket.h" |
+#include "net/base/net_errors.h" |
#include "net/base/rand_callback.h" |
namespace net { |
@@ -13,13 +14,26 @@ UDPServerSocket::UDPServerSocket(net::NetLog* net_log, |
: socket_(DatagramSocket::DEFAULT_BIND, |
RandIntCallback(), |
net_log, |
- source) { |
+ source), |
+ allow_broadcast_(false) { |
} |
UDPServerSocket::~UDPServerSocket() { |
} |
int UDPServerSocket::Listen(const IPEndPoint& address) { |
+ int rv = socket_.Open(address.GetFamily()); |
+ if (rv != OK) |
+ return rv; |
+ |
+ if (allow_broadcast_) { |
+ rv = socket_.SetBroadcast(true); |
+ if (rv != OK) { |
+ socket_.Close(); |
+ return rv; |
+ } |
+ } |
+ |
return socket_.Bind(address); |
} |
@@ -66,7 +80,7 @@ void UDPServerSocket::AllowAddressReuse() { |
} |
void UDPServerSocket::AllowBroadcast() { |
- socket_.AllowBroadcast(); |
+ allow_broadcast_ = true; |
} |
int UDPServerSocket::JoinGroup(const IPAddressNumber& group_address) const { |