| 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);
|
| };
|
|
|