diff options
author | Matt Schatz <genius3000@g3k.solutions> | 2019-08-01 04:55:22 -0600 |
---|---|---|
committer | P. Powell <petpow@saberuk.com> | 2019-08-01 13:23:46 +0100 |
commit | cb1e9772a9526da37b7a155109bb481d56d97f5b (patch) | |
tree | e933fd519fcf2aff8384b4b690ea0230f608502d | |
parent | d5ed9d15c1d16d8ea0fd2a9087cf04016ce91345 (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.cpp | 9 | ||||
-rw-r--r-- | src/socket.cpp | 4 |
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)); |