SocketEngine::AddFd(this, FD_WANT_FAST_READ | FD_WANT_EDGE_WRITE);
}
-void BufferedSocket::DoConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip)
+void BufferedSocket::DoConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned int maxtime)
{
- BufferedSocketError err = BeginConnect(ipaddr, aport, maxtime, connectbindip);
+ BufferedSocketError err = BeginConnect(dest, bind, maxtime);
if (err != I_ERR_NONE)
{
state = I_ERROR;
}
}
-BufferedSocketError BufferedSocket::BeginConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip)
-{
- irc::sockets::sockaddrs addr, bind;
- if (!irc::sockets::aptosa(ipaddr, aport, addr))
- {
- ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "BUG: Hostname passed to BufferedSocket, rather than an IP address!");
- return I_ERR_CONNECT;
- }
-
- bind.sa.sa_family = 0;
- if (!connectbindip.empty())
- {
- if (!irc::sockets::aptosa(connectbindip, 0, bind))
- {
- return I_ERR_BIND;
- }
- }
-
- return BeginConnect(addr, bind, maxtime);
-}
-
-BufferedSocketError BufferedSocket::BeginConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long timeout)
+BufferedSocketError BufferedSocket::BeginConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned int timeout)
{
if (fd < 0)
- fd = socket(dest.sa.sa_family, SOCK_STREAM, 0);
+ fd = socket(dest.family(), SOCK_STREAM, 0);
if (fd < 0)
return I_ERR_SOCKET;
- if (bind.sa.sa_family != 0)
+ if (bind.family() != 0)
{
if (SocketEngine::Bind(fd, bind) < 0)
return I_ERR_BIND;
SocketEngine::NonBlocking(fd);
- if (SocketEngine::Connect(this, &dest.sa, dest.sa_size()) == -1)
+ if (SocketEngine::Connect(this, dest) == -1)
{
if (errno != EINPROGRESS)
return I_ERR_CONNECT;
const SendQueue::Element& elem = *i;
iovecs[j].iov_base = const_cast<char*>(elem.data());
iovecs[j].iov_len = elem.length();
- rv_max += elem.length();
+ rv_max += iovecs[j].iov_len;
}
rv = SocketEngine::WriteV(this, iovecs, bufcount);
}
}
}
+bool StreamSocket::OnSetEndPoint(const irc::sockets::sockaddrs& local, const irc::sockets::sockaddrs& remote)
+{
+ return false;
+}
+
void StreamSocket::WriteData(const std::string &data)
{
if (fd < 0)