Skip to content
Snippets Groups Projects
Commit 949cbb9f authored by Adrien Béraud's avatar Adrien Béraud
Browse files

sockaddr: allow to release ownership

parent 37cfbffd
No related branches found
No related tags found
No related merge requests found
...@@ -504,14 +504,8 @@ struct sockaddr** dht_runner_get_public_address(const dht_runner* r) { ...@@ -504,14 +504,8 @@ struct sockaddr** dht_runner_get_public_address(const dht_runner* r) {
if (addrs.empty()) if (addrs.empty())
return nullptr; return nullptr;
auto ret = (struct sockaddr**)malloc(sizeof(struct sockaddr*) * (addrs.size() + 1)); auto ret = (struct sockaddr**)malloc(sizeof(struct sockaddr*) * (addrs.size() + 1));
for (size_t i=0; i<addrs.size(); i++) { for (size_t i=0; i<addrs.size(); i++)
if (const auto& addr = addrs[i]) { ret[i] = addrs[i].release();
ret[i] = (struct sockaddr*)malloc(addr.getLength());
memcpy((struct sockaddr*)ret[i], addr.get(), addr.getLength());
} else {
ret[i] = nullptr;
}
}
ret[addrs.size()] = nullptr; ret[addrs.size()] = nullptr;
return ret; return ret;
} }
......
...@@ -236,6 +236,15 @@ public: ...@@ -236,6 +236,15 @@ public:
return *reinterpret_cast<sockaddr_in6*>(get()); return *reinterpret_cast<sockaddr_in6*>(get());
} }
/**
* Releases the ownership of the managed object, if any.
* The caller is responsible for deleting the object with free().
*/
inline sockaddr* release() {
len = 0;
return addr.release();
}
/** /**
* Return true if address is a loopback IP address. * Return true if address is a loopback IP address.
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment