aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorVasil Dimov <vd@FreeBSD.org>2021-04-19 11:35:09 +0200
committerVasil Dimov <vd@FreeBSD.org>2022-07-20 16:26:24 +0200
commitb527b549504672704a61f70d2565b9489aaaba91 (patch)
tree8e303842e1ad9b220ba2d5f150061a2061887663 /src/util
parent29f66f76826056f53d971ac734b7ed49b39848d3 (diff)
net: convert standalone SetSocketNonBlocking() to Sock::SetNonBlocking()
This further encapsulates syscalls inside the `Sock` class. Co-authored-by: practicalswift <practicalswift@users.noreply.github.com>
Diffstat (limited to 'src/util')
-rw-r--r--src/util/sock.cpp18
-rw-r--r--src/util/sock.h9
2 files changed, 17 insertions, 10 deletions
diff --git a/src/util/sock.cpp b/src/util/sock.cpp
index b2b5133629..84ac2759fa 100644
--- a/src/util/sock.cpp
+++ b/src/util/sock.cpp
@@ -117,18 +117,22 @@ int Sock::GetSockName(sockaddr* name, socklen_t* name_len) const
return getsockname(m_socket, name, name_len);
}
-bool SetSocketNonBlocking(const SOCKET& hSocket)
+bool Sock::SetNonBlocking() const
{
#ifdef WIN32
- u_long nOne = 1;
- if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR) {
+ u_long on{1};
+ if (ioctlsocket(m_socket, FIONBIO, &on) == SOCKET_ERROR) {
+ return false;
+ }
#else
- int fFlags = fcntl(hSocket, F_GETFL, 0);
- if (fcntl(hSocket, F_SETFL, fFlags | O_NONBLOCK) == SOCKET_ERROR) {
-#endif
+ const int flags{fcntl(m_socket, F_GETFL, 0)};
+ if (flags == SOCKET_ERROR) {
return false;
}
-
+ if (fcntl(m_socket, F_SETFL, flags | O_NONBLOCK) == SOCKET_ERROR) {
+ return false;
+ }
+#endif
return true;
}
diff --git a/src/util/sock.h b/src/util/sock.h
index b97977da95..7912284904 100644
--- a/src/util/sock.h
+++ b/src/util/sock.h
@@ -134,6 +134,12 @@ public:
[[nodiscard]] virtual int GetSockName(sockaddr* name, socklen_t* name_len) const;
/**
+ * Set the non-blocking option on the socket.
+ * @return true if set successfully
+ */
+ [[nodiscard]] virtual bool SetNonBlocking() const;
+
+ /**
* Check if the underlying socket can be used for `select(2)` (or the `Wait()` method).
* @return true if selectable
*/
@@ -273,9 +279,6 @@ private:
void Close();
};
-/** Enable non-blocking mode for a socket */
-bool SetSocketNonBlocking(const SOCKET& hSocket);
-
/** Return readable error string for a network error code */
std::string NetworkErrorString(int err);