simplify IXDNSLookup
This commit is contained in:
		| @@ -15,12 +15,13 @@ namespace ix | |||||||
|     const int64_t DNSLookup::kDefaultWait = 10; // ms |     const int64_t DNSLookup::kDefaultWait = 10; // ms | ||||||
|  |  | ||||||
|     DNSLookup::DNSLookup(const std::string& hostname, int port, int64_t wait) : |     DNSLookup::DNSLookup(const std::string& hostname, int port, int64_t wait) : | ||||||
|  |         _hostname(hostname), | ||||||
|         _port(port), |         _port(port), | ||||||
|         _wait(wait), |         _wait(wait), | ||||||
|         _res(nullptr), |         _res(nullptr), | ||||||
|         _done(false) |         _done(false) | ||||||
|     { |     { | ||||||
|         setHostname(hostname); |         ; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     struct addrinfo* DNSLookup::getAddrInfo(const std::string& hostname, |     struct addrinfo* DNSLookup::getAddrInfo(const std::string& hostname, | ||||||
| @@ -66,7 +67,7 @@ namespace ix | |||||||
|             return nullptr; |             return nullptr; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return getAddrInfo(getHostname(), _port, errMsg); |         return getAddrInfo(_hostname, _port, errMsg); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     struct addrinfo* DNSLookup::resolveAsync(std::string& errMsg, |     struct addrinfo* DNSLookup::resolveAsync(std::string& errMsg, | ||||||
| @@ -89,7 +90,9 @@ namespace ix | |||||||
|         auto ptr = shared_from_this(); |         auto ptr = shared_from_this(); | ||||||
|         std::weak_ptr<DNSLookup> self(ptr); |         std::weak_ptr<DNSLookup> self(ptr); | ||||||
|  |  | ||||||
|         _thread = std::thread(&DNSLookup::run, this, self, getHostname(), _port); |         int port = _port; | ||||||
|  |         std::string hostname(_hostname); | ||||||
|  |         _thread = std::thread(&DNSLookup::run, this, self, hostname, port); | ||||||
|         _thread.detach(); |         _thread.detach(); | ||||||
|  |  | ||||||
|         std::unique_lock<std::mutex> lock(_conditionVariableMutex); |         std::unique_lock<std::mutex> lock(_conditionVariableMutex); | ||||||
| @@ -123,7 +126,7 @@ namespace ix | |||||||
|         return getRes(); |         return getRes(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void DNSLookup::run(std::weak_ptr<DNSLookup> self, const std::string& hostname, int port) // thread runner |     void DNSLookup::run(std::weak_ptr<DNSLookup> self, std::string hostname, int port) // thread runner | ||||||
|     { |     { | ||||||
|         // We don't want to read or write into members variables of an object that could be |         // We don't want to read or write into members variables of an object that could be | ||||||
|         // gone, so we use temporary variables (res) or we pass in by copy everything that |         // gone, so we use temporary variables (res) or we pass in by copy everything that | ||||||
| @@ -142,18 +145,6 @@ namespace ix | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void DNSLookup::setHostname(const std::string& hostname) |  | ||||||
|     { |  | ||||||
|         std::lock_guard<std::mutex> lock(_hostnameMutex); |  | ||||||
|         _hostname = hostname; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     const std::string& DNSLookup::getHostname() |  | ||||||
|     { |  | ||||||
|         std::lock_guard<std::mutex> lock(_hostnameMutex); |  | ||||||
|         return _hostname; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     void DNSLookup::setErrMsg(const std::string& errMsg) |     void DNSLookup::setErrMsg(const std::string& errMsg) | ||||||
|     { |     { | ||||||
|         std::lock_guard<std::mutex> lock(_errMsgMutex); |         std::lock_guard<std::mutex> lock(_errMsgMutex); | ||||||
|   | |||||||
| @@ -42,10 +42,7 @@ namespace ix | |||||||
|                                             int port, |                                             int port, | ||||||
|                                             std::string& errMsg); |                                             std::string& errMsg); | ||||||
|  |  | ||||||
|         void run(std::weak_ptr<DNSLookup> self, const std::string& hostname, int port); // thread runner |         void run(std::weak_ptr<DNSLookup> self, std::string hostname, int port); // thread runner | ||||||
|  |  | ||||||
|         void setHostname(const std::string& hostname); |  | ||||||
|         const std::string& getHostname(); |  | ||||||
|  |  | ||||||
|         void setErrMsg(const std::string& errMsg); |         void setErrMsg(const std::string& errMsg); | ||||||
|         const std::string& getErrMsg(); |         const std::string& getErrMsg(); | ||||||
| @@ -54,7 +51,6 @@ namespace ix | |||||||
|         struct addrinfo* getRes(); |         struct addrinfo* getRes(); | ||||||
|  |  | ||||||
|         std::string _hostname; |         std::string _hostname; | ||||||
|         std::mutex _hostnameMutex; |  | ||||||
|         int _port; |         int _port; | ||||||
|  |  | ||||||
|         int64_t _wait; |         int64_t _wait; | ||||||
|   | |||||||
| @@ -253,14 +253,14 @@ namespace ix | |||||||
|     bool Socket::writeBytes(const std::string& str, |     bool Socket::writeBytes(const std::string& str, | ||||||
|                             const CancellationRequest& isCancellationRequested) |                             const CancellationRequest& isCancellationRequested) | ||||||
|     { |     { | ||||||
|         char* buffer = const_cast<char*>(str.c_str()); |         int offset = 0; | ||||||
|         int len = (int) str.size(); |         int len = (int) str.size(); | ||||||
|  |  | ||||||
|         while (true) |         while (true) | ||||||
|         { |         { | ||||||
|             if (isCancellationRequested && isCancellationRequested()) return false; |             if (isCancellationRequested && isCancellationRequested()) return false; | ||||||
|  |  | ||||||
|             ssize_t ret = send(buffer, len); |             ssize_t ret = send((char*)&str[offset], len); | ||||||
|  |  | ||||||
|             // We wrote some bytes, as needed, all good. |             // We wrote some bytes, as needed, all good. | ||||||
|             if (ret > 0) |             if (ret > 0) | ||||||
| @@ -271,7 +271,7 @@ namespace ix | |||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     buffer += ret; |                     offset += ret; | ||||||
|                     len -= ret; |                     len -= ret; | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user