summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Schatz <genius3000@g3k.solutions>2019-08-01 04:55:22 -0600
committerP. Powell <petpow@saberuk.com>2019-08-01 13:23:46 +0100
commitcb1e9772a9526da37b7a155109bb481d56d97f5b (patch)
treee933fd519fcf2aff8384b4b690ea0230f608502d
parentd5ed9d15c1d16d8ea0fd2a9087cf04016ce91345 (diff)
Move UNIX socket removal to ListenSocket ctor.
Doing the removal in BindPorts() would remove the socket during a rehash and not recreate it. Now it's only removed if it's about to be created.
-rw-r--r--src/listensocket.cpp9
-rw-r--r--src/socket.cpp4
2 files changed, 9 insertions, 4 deletions
diff --git a/src/listensocket.cpp b/src/listensocket.cpp
index 811c6c8ac..4805b7717 100644
--- a/src/listensocket.cpp
+++ b/src/listensocket.cpp
@@ -29,6 +29,15 @@ ListenSocket::ListenSocket(ConfigTag* tag, const irc::sockets::sockaddrs& bind_t
: bind_tag(tag)
, bind_sa(bind_to)
{
+ // Are we creating a UNIX socket?
+ if (bind_to.family() == AF_UNIX)
+ {
+ // Is 'replace' enabled?
+ const bool replace = tag->getBool("replace");
+ if (replace && irc::sockets::isunix(bind_to.str()))
+ unlink(bind_to.str().c_str());
+ }
+
fd = socket(bind_to.family(), SOCK_STREAM, 0);
if (this->fd == -1)
diff --git a/src/socket.cpp b/src/socket.cpp
index 26b5aeee3..f19af36bb 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -118,10 +118,6 @@ int InspIRCd::BindPorts(FailedPortList& failed_ports)
continue;
}
- const bool replace = tag->getBool("replace");
- if (replace && irc::sockets::isunix(fullpath))
- remove(fullpath.c_str());
-
irc::sockets::untosa(fullpath, bindspec);
if (!BindPort(tag, bindspec, old_ports))
failed_ports.push_back(std::make_pair(bindspec, errno));