aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-12-25 21:49:59 +0000
committerGravatar Sadie Powell2022-12-25 22:41:28 +0000
commitb1eb362d8349447b607a9ccb075ba0043bb70947 (patch)
tree6e482446faf550b309e45104424866140bac087b /src
parentRefactor ListenSocket::OnEventHandlerRead slightly. (diff)
Refactor SocketEngine slightly.
- Remove pointless shutdown() wrapper. - Remove pointless bounds checking function. - Make Bind and Listen take an EventHandler instead of a fd. - Add nullability attributes to every method.
Diffstat (limited to 'src')
-rw-r--r--src/coremods/core_dns.cpp2
-rw-r--r--src/inspsocket.cpp2
-rw-r--r--src/listensocket.cpp4
-rw-r--r--src/modules/m_ident.cpp2
-rw-r--r--src/socketengine.cpp56
-rw-r--r--src/users.cpp2
6 files changed, 29 insertions, 39 deletions
diff --git a/src/coremods/core_dns.cpp b/src/coremods/core_dns.cpp
index 7ddc70dd5..4716eef43 100644
--- a/src/coremods/core_dns.cpp
+++ b/src/coremods/core_dns.cpp
@@ -798,7 +798,7 @@ public:
irc::sockets::sockaddrs bindto;
bindto.from_ip_port(sourceaddr, sourceport);
- if (SocketEngine::Bind(this->GetFd(), bindto) < 0)
+ if (SocketEngine::Bind(this, bindto) < 0)
{
/* Failed to bind */
ServerInstance->Logs.Error(MODNAME, "Error binding dns socket - hostnames will NOT resolve");
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index abbdbebb3..eb348e7b3 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -74,7 +74,7 @@ BufferedSocketError BufferedSocket::BeginConnect(const irc::sockets::sockaddrs&
if (bind.family() != 0)
{
- if (SocketEngine::Bind(GetFd(), bind) < 0)
+ if (SocketEngine::Bind(this, bind) < 0)
return I_ERR_BIND;
}
diff --git a/src/listensocket.cpp b/src/listensocket.cpp
index 1638e8860..d781a6b82 100644
--- a/src/listensocket.cpp
+++ b/src/listensocket.cpp
@@ -86,9 +86,9 @@ ListenSocket::ListenSocket(std::shared_ptr<ConfigTag> tag, const irc::sockets::s
}
SocketEngine::SetReuse(GetFd());
- int rv = SocketEngine::Bind(GetFd(), bind_to);
+ int rv = SocketEngine::Bind(this, bind_to);
if (rv >= 0)
- rv = SocketEngine::Listen(GetFd(), ServerInstance->Config->MaxConn);
+ rv = SocketEngine::Listen(this, ServerInstance->Config->MaxConn);
if (bind_to.family() == AF_UNIX)
{
diff --git a/src/modules/m_ident.cpp b/src/modules/m_ident.cpp
index 6cb401a2d..15e9a23d8 100644
--- a/src/modules/m_ident.cpp
+++ b/src/modules/m_ident.cpp
@@ -136,7 +136,7 @@ public:
}
/* Attempt to bind (ident requests must come from the ip the query is referring to */
- if (SocketEngine::Bind(GetFd(), bindaddr) < 0)
+ if (SocketEngine::Bind(this, bindaddr) < 0)
{
this->Close();
throw ModuleException(mod, "failed to bind()");
diff --git a/src/socketengine.cpp b/src/socketengine.cpp
index 216806a76..a256ae612 100644
--- a/src/socketengine.cpp
+++ b/src/socketengine.cpp
@@ -168,19 +168,14 @@ bool SocketEngine::HasFd(int fd)
EventHandler* SocketEngine::GetRef(int fd)
{
- if (fd < 0 || static_cast<unsigned int>(fd) >= ref.size())
+ if (fd < 0 || static_cast<size_t>(fd) >= ref.size())
return nullptr;
return ref[fd];
}
-bool SocketEngine::BoundsCheckFd(const EventHandler* eh)
+int SocketEngine::Accept(EventHandler* eh, sockaddr* addr, socklen_t* addrlen)
{
- return eh && eh->HasFd();
-}
-
-int SocketEngine::Accept(EventHandler* fd, sockaddr* addr, socklen_t* addrlen)
-{
- return accept(fd->GetFd(), addr, addrlen);
+ return accept(eh->GetFd(), addr, addrlen);
}
int SocketEngine::Close(EventHandler* eh)
@@ -228,43 +223,43 @@ void SocketEngine::SetReuse(int fd)
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char*>(&on), sizeof(on));
}
-ssize_t SocketEngine::RecvFrom(EventHandler* fd, void* buf, size_t len, int flags, sockaddr* from, socklen_t* fromlen)
+ssize_t SocketEngine::RecvFrom(EventHandler* eh, void* buf, size_t len, int flags, sockaddr* from, socklen_t* fromlen)
{
- ssize_t nbRecvd = recvfrom(fd->GetFd(), static_cast<char*>(buf), len, flags, from, fromlen);
+ ssize_t nbRecvd = recvfrom(eh->GetFd(), static_cast<char*>(buf), len, flags, from, fromlen);
stats.UpdateReadCounters(nbRecvd);
return nbRecvd;
}
-ssize_t SocketEngine::Send(EventHandler* fd, const void* buf, size_t len, int flags)
+ssize_t SocketEngine::Send(EventHandler* eh, const void* buf, size_t len, int flags)
{
- ssize_t nbSent = send(fd->GetFd(), static_cast<const char*>(buf), len, flags);
+ ssize_t nbSent = send(eh->GetFd(), static_cast<const char*>(buf), len, flags);
stats.UpdateWriteCounters(nbSent);
return nbSent;
}
-ssize_t SocketEngine::Recv(EventHandler* fd, void* buf, size_t len, int flags)
+ssize_t SocketEngine::Recv(EventHandler* eh, void* buf, size_t len, int flags)
{
- ssize_t nbRecvd = recv(fd->GetFd(), static_cast<char*>(buf), len, flags);
+ ssize_t nbRecvd = recv(eh->GetFd(), static_cast<char*>(buf), len, flags);
stats.UpdateReadCounters(nbRecvd);
return nbRecvd;
}
-ssize_t SocketEngine::SendTo(EventHandler* fd, const void* buf, size_t len, int flags, const irc::sockets::sockaddrs& address)
+ssize_t SocketEngine::SendTo(EventHandler* eh, const void* buf, size_t len, int flags, const irc::sockets::sockaddrs& address)
{
- ssize_t nbSent = sendto(fd->GetFd(), static_cast<const char*>(buf), len, flags, &address.sa, address.sa_size());
+ ssize_t nbSent = sendto(eh->GetFd(), static_cast<const char*>(buf), len, flags, &address.sa, address.sa_size());
stats.UpdateWriteCounters(nbSent);
return nbSent;
}
-ssize_t SocketEngine::WriteV(EventHandler* fd, const IOVector* iovec, int count)
+ssize_t SocketEngine::WriteV(EventHandler* eh, const IOVector* iovec, int count)
{
- ssize_t sent = writev(fd->GetFd(), iovec, count);
+ ssize_t sent = writev(eh->GetFd(), iovec, count);
stats.UpdateWriteCounters(sent);
return sent;
}
#ifdef _WIN32
-int SocketEngine::WriteV(EventHandler* fd, const iovec* iovec, int count)
+int SocketEngine::WriteV(EventHandler* eh, const iovec* iovec, int count)
{
// On Windows the fields in iovec are not in the order required by the Winsock API; IOVector has
// the fields in the correct order.
@@ -278,13 +273,13 @@ int SocketEngine::WriteV(EventHandler* fd, const iovec* iovec, int count)
wiovec[i].iov_len = iovec[i].iov_len;
wiovec[i].iov_base = reinterpret_cast<char*>(iovec[i].iov_base);
}
- return WriteV(fd, wiovec, count);
+ return WriteV(eh, wiovec, count);
}
#endif
-int SocketEngine::Connect(EventHandler* fd, const irc::sockets::sockaddrs& address)
+int SocketEngine::Connect(EventHandler* eh, const irc::sockets::sockaddrs& address)
{
- int ret = connect(fd->GetFd(), &address.sa, address.sa_size());
+ int ret = connect(eh->GetFd(), &address.sa, address.sa_size());
#ifdef _WIN32
if ((ret == SOCKET_ERROR) && (WSAGetLastError() == WSAEWOULDBLOCK))
errno = EINPROGRESS;
@@ -292,24 +287,19 @@ int SocketEngine::Connect(EventHandler* fd, const irc::sockets::sockaddrs& addre
return ret;
}
-int SocketEngine::Shutdown(EventHandler* fd, int how)
-{
- return shutdown(fd->GetFd(), how);
-}
-
-int SocketEngine::Bind(int fd, const irc::sockets::sockaddrs& addr)
+int SocketEngine::Shutdown(EventHandler* eh, int how)
{
- return bind(fd, &addr.sa, addr.sa_size());
+ return shutdown(eh->GetFd(), how);
}
-int SocketEngine::Listen(int sockfd, int backlog)
+int SocketEngine::Bind(EventHandler* eh, const irc::sockets::sockaddrs& addr)
{
- return listen(sockfd, backlog);
+ return bind(eh->GetFd(), &addr.sa, addr.sa_size());
}
-int SocketEngine::Shutdown(int fd, int how)
+int SocketEngine::Listen(EventHandler* eh, int backlog)
{
- return shutdown(fd, how);
+ return listen(eh->GetFd(), backlog);
}
void SocketEngine::Statistics::UpdateReadCounters(ssize_t len_in)
diff --git a/src/users.cpp b/src/users.cpp
index 1f3307109..ad12f8619 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -708,7 +708,7 @@ void LocalUser::ChangeRemoteAddress(const irc::sockets::sockaddrs& sa)
void LocalUser::Write(const ClientProtocol::SerializedMessage& text)
{
- if (!SocketEngine::BoundsCheckFd(&eh))
+ if (!eh.HasFd())
return;
if (ServerInstance->Config->RawLog)