Commit 8c3d0bc9 authored by Naizhi Li's avatar Naizhi Li Committed by Facebook Github Bot 1

Fix folly::SocketAddress::reset

Summary:
Currently reset does not actually reset it. This change
make sure it does the job.

Reviewed By: yfeldblum

Differential Revision: D3788869

fbshipit-source-id: 771a641e31bb3cf307e5bebb979b81a3d3feea55
parent 4458ae04
......@@ -325,7 +325,10 @@ void SocketAddress::setFromSockaddr(const struct sockaddr_un* address,
"with length too long for a sockaddr_un");
}
prepFamilyChange(AF_UNIX);
if (!external_) {
storage_.un.init();
}
external_ = true;
memcpy(storage_.un.addr, address, addrlen);
updateUnixAddressLength(addrlen);
......
......@@ -151,7 +151,11 @@ class SocketAddress {
bool isLoopbackAddress() const;
void reset() {
prepFamilyChange(AF_UNSPEC);
if (external_) {
storage_.un.free();
}
storage_.addr = folly::IPAddress();
external_ = false;
}
/**
......@@ -579,21 +583,6 @@ class SocketAddress {
void updateUnixAddressLength(socklen_t addrlen);
void prepFamilyChange(sa_family_t newFamily) {
if (newFamily != AF_UNIX) {
if (external_) {
storage_.un.free();
storage_.addr = folly::IPAddress();
}
external_ = false;
} else {
if (!external_) {
storage_.un.init();
}
external_ = true;
}
}
/*
* storage_ contains room for a full IPv4 or IPv6 address, so they can be
* stored inline without a separate allocation on the heap.
......
......@@ -897,3 +897,18 @@ TEST(SocketAddress, ResetUnixAddress) {
addy.reset();
EXPECT_EQ(addy.getFamily(), AF_UNSPEC);
}
TEST(SocketAddress, ResetIPAddress) {
SocketAddress addr;
addr.setFromIpPort("127.0.0.1", 80);
addr.reset();
EXPECT_EQ(addr.getFamily(), AF_UNSPEC);
EXPECT_FALSE(addr.isInitialized());
EXPECT_TRUE(addr.empty());
addr.setFromIpPort("2620:0:1cfe:face:b00c::3:65535");
addr.reset();
EXPECT_EQ(addr.getFamily(), AF_UNSPEC);
EXPECT_FALSE(addr.isInitialized());
EXPECT_TRUE(addr.empty());
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment