Skip to content

Commit e913ced

Browse files
committed
src: return a shared_ptr<SocketAddress>
Signed-off-by: James M Snell <[email protected]>
1 parent 2c54868 commit e913ced

File tree

3 files changed

+27
-23
lines changed

3 files changed

+27
-23
lines changed

src/node_sockaddr.cc

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,6 @@ using v8::Object;
2323
using v8::Uint32;
2424
using v8::Value;
2525

26-
namespace {
27-
template <typename T, typename F>
28-
SocketAddress FromUVHandle(F fn, const T& handle) {
29-
SocketAddress addr;
30-
int len = sizeof(sockaddr_storage);
31-
if (fn(&handle, addr.storage(), &len) == 0)
32-
CHECK_EQ(static_cast<size_t>(len), addr.length());
33-
else
34-
addr.storage()->sa_family = 0;
35-
return addr;
36-
}
37-
} // namespace
38-
3926
bool SocketAddress::ToSockAddr(
4027
int32_t family,
4128
const char* host,
@@ -96,19 +83,23 @@ size_t SocketAddress::Hash::operator()(const SocketAddress& addr) const {
9683
return hash;
9784
}
9885

99-
SocketAddress SocketAddress::FromSockName(const uv_tcp_t& handle) {
86+
std::shared_ptr<SocketAddress> SocketAddress::FromSockName(
87+
const uv_tcp_t& handle) {
10088
return FromUVHandle(uv_tcp_getsockname, handle);
10189
}
10290

103-
SocketAddress SocketAddress::FromSockName(const uv_udp_t& handle) {
91+
std::shared_ptr<SocketAddress> SocketAddress::FromSockName(
92+
const uv_udp_t& handle) {
10493
return FromUVHandle(uv_udp_getsockname, handle);
10594
}
10695

107-
SocketAddress SocketAddress::FromPeerName(const uv_tcp_t& handle) {
96+
std::shared_ptr<SocketAddress> SocketAddress::FromPeerName(
97+
const uv_tcp_t& handle) {
10898
return FromUVHandle(uv_tcp_getpeername, handle);
10999
}
110100

111-
SocketAddress SocketAddress::FromPeerName(const uv_udp_t& handle) {
101+
std::shared_ptr<SocketAddress> SocketAddress::FromPeerName(
102+
const uv_udp_t& handle) {
112103
return FromUVHandle(uv_udp_getpeername, handle);
113104
}
114105

src/node_sockaddr.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ class SocketAddress : public MemoryRetainer {
126126
inline void Update(uint8_t* data, size_t len);
127127
inline void Update(const sockaddr* data, size_t len);
128128

129-
static SocketAddress FromSockName(const uv_udp_t& handle);
130-
static SocketAddress FromSockName(const uv_tcp_t& handle);
131-
static SocketAddress FromPeerName(const uv_udp_t& handle);
132-
static SocketAddress FromPeerName(const uv_tcp_t& handle);
129+
static std::shared_ptr<SocketAddress> FromSockName(const uv_udp_t& handle);
130+
static std::shared_ptr<SocketAddress> FromSockName(const uv_tcp_t& handle);
131+
static std::shared_ptr<SocketAddress> FromPeerName(const uv_udp_t& handle);
132+
static std::shared_ptr<SocketAddress> FromPeerName(const uv_tcp_t& handle);
133133

134134
inline v8::Local<v8::Object> ToJS(
135135
Environment* env,
@@ -146,6 +146,17 @@ class SocketAddress : public MemoryRetainer {
146146

147147
private:
148148
sockaddr_storage address_;
149+
150+
template <typename T, typename F>
151+
static std::shared_ptr<SocketAddress> FromUVHandle(F fn, const T& handle) {
152+
std::shared_ptr<SocketAddress> addr = std::make_shared<SocketAddress>();
153+
int len = sizeof(sockaddr_storage);
154+
if (fn(&handle, addr->storage(), &len) == 0) {
155+
CHECK_EQ(static_cast<size_t>(len), addr->length());
156+
return addr;
157+
}
158+
return std::shared_ptr<SocketAddress>();
159+
}
149160
};
150161

151162
class SocketAddressBase : public BaseObject {

src/udp_wrap.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,11 +622,13 @@ AsyncWrap* UDPWrap::GetAsyncWrap() {
622622
}
623623

624624
SocketAddress UDPWrap::GetPeerName() {
625-
return SocketAddress::FromPeerName(handle_);
625+
std::shared_ptr<SocketAddress> addr = SocketAddress::FromPeerName(handle_);
626+
return addr ? *(addr.get()) : SocketAddress();
626627
}
627628

628629
SocketAddress UDPWrap::GetSockName() {
629-
return SocketAddress::FromSockName(handle_);
630+
std::shared_ptr<SocketAddress> addr = SocketAddress::FromSockName(handle_);
631+
return addr ? *(addr.get()) : SocketAddress();
630632
}
631633

632634
void UDPWrapBase::RecvStart(const FunctionCallbackInfo<Value>& args) {

0 commit comments

Comments
 (0)