Index: trunk/src/chrome/utility/local_discovery/service_discovery_message_handler.cc |
=================================================================== |
--- trunk/src/chrome/utility/local_discovery/service_discovery_message_handler.cc (revision 255683) |
+++ trunk/src/chrome/utility/local_discovery/service_discovery_message_handler.cc (working copy) |
@@ -72,28 +72,32 @@ |
// net::MDnsSocketFactory implementation: |
virtual void CreateSockets( |
ScopedVector<net::DatagramServerSocket>* sockets) OVERRIDE { |
- sockets->swap(sockets_); |
- Reset(); |
+ for (size_t i = 0; i < sockets_.size(); ++i) { |
+ // Takes ownership of sockets_[i].socket; |
+ ScopedSocketFactory platform_factory(sockets_[i].socket); |
+ scoped_ptr<net::DatagramServerSocket> socket( |
+ net::CreateAndBindMDnsSocket(sockets_[i].address_family, |
+ sockets_[i].interface_index)); |
+ if (socket) |
+ sockets->push_back(socket.release()); |
+ } |
+ sockets_.clear(); |
} |
- void AddSocket(const SocketInfo& socket_info) { |
- // Takes ownership of socket_info.socket; |
- ScopedSocketFactory platform_factory(socket_info.socket); |
- scoped_ptr<net::DatagramServerSocket> socket( |
- net::CreateAndBindMDnsSocket(socket_info.address_family, |
- socket_info.interface_index)); |
- if (socket) { |
- socket->DetachFromThread(); |
- sockets_.push_back(socket.release()); |
- } |
+ void AddSocket(const SocketInfo& socket) { |
+ sockets_.push_back(socket); |
} |
void Reset() { |
+ for (size_t i = 0; i < sockets_.size(); ++i) { |
+ if (sockets_[i].socket != net::kInvalidSocket) |
+ ClosePlatformSocket(sockets_[i].socket); |
+ } |
sockets_.clear(); |
} |
private: |
- ScopedVector<net::DatagramServerSocket> sockets_; |
+ std::vector<SocketInfo> sockets_; |
DISALLOW_COPY_AND_ASSIGN(PreCreatedMDnsSocketFactory); |
}; |