aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/treesocket1.cpp
diff options
context:
space:
mode:
authorGravatar Peter Powell2019-02-07 15:34:41 +0000
committerGravatar Peter Powell2019-04-15 12:21:12 +0100
commitc2c4de7267db9835e36132364f422ba7d93f25d6 (patch)
treec165dda97b90d713cf25ddd7ddd000839c2e3405 /src/modules/m_spanningtree/treesocket1.cpp
parentcommonchans: HandleMessage should not be marked as override. (diff)
Fix linking servers with UNIX sockets.
- Remove the address/port overloads of BeginConnect. - Change DoConnect to take a sockaddrs instead of an address/port.
Diffstat (limited to 'src/modules/m_spanningtree/treesocket1.cpp')
-rw-r--r--src/modules/m_spanningtree/treesocket1.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp
index 062d04222..fd20d04c4 100644
--- a/src/modules/m_spanningtree/treesocket1.cpp
+++ b/src/modules/m_spanningtree/treesocket1.cpp
@@ -36,7 +36,7 @@
* BufferedSocket, we just call DoConnect() for most of the action,
* and only do minor initialization tasks ourselves.
*/
-TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const std::string& ipaddr)
+TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const irc::sockets::sockaddrs& dest)
: linkID(link->Name), LinkState(CONNECTING), MyRoot(NULL), proto_version(0)
, burstsent(false), age(ServerInstance->Time())
{
@@ -45,7 +45,17 @@ TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const std::string& ipaddr)
capab->ac = myac;
capab->capab_phase = 0;
- DoConnect(ipaddr, link->Port, link->Timeout, link->Bind);
+ irc::sockets::sockaddrs bind;
+ memset(&bind, 0, sizeof(bind));
+ if ((dest.family() == AF_INET || dest.family() == AF_INET6) && !irc::sockets::aptosa(link->Bind, 0, bind))
+ {
+ state = I_ERROR;
+ SetError("Bind address '" + link->Bind + "' is not an valid IPv4 or IPv6 address");
+ TreeSocket::OnError(I_ERR_BIND);
+ return;
+ }
+
+ DoConnect(dest, bind, link->Timeout);
Utils->timeoutlist[this] = std::pair<std::string, unsigned int>(linkID, link->Timeout);
SendCapabilities(1);
}