aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorVasil Dimov <vd@FreeBSD.org>2022-07-05 12:20:42 +0200
committerVasil Dimov <vd@FreeBSD.org>2022-07-20 16:26:24 +0200
commit29f66f76826056f53d971ac734b7ed49b39848d3 (patch)
tree6bb5fe27880dc8c584ce7297afdbc654610975a7 /src/util
parentb4bac556791b5bb8aa118d4c1fed42c3fe45550c (diff)
downloadbitcoin-29f66f76826056f53d971ac734b7ed49b39848d3.tar.xz
moveonly: move SetSocketNonBlocking() from netbase to util/sock
To be converted to a method of the `Sock` class.
Diffstat (limited to 'src/util')
-rw-r--r--src/util/sock.cpp15
-rw-r--r--src/util/sock.h3
2 files changed, 18 insertions, 0 deletions
diff --git a/src/util/sock.cpp b/src/util/sock.cpp
index c312a88276..b2b5133629 100644
--- a/src/util/sock.cpp
+++ b/src/util/sock.cpp
@@ -117,6 +117,21 @@ int Sock::GetSockName(sockaddr* name, socklen_t* name_len) const
return getsockname(m_socket, name, name_len);
}
+bool SetSocketNonBlocking(const SOCKET& hSocket)
+{
+#ifdef WIN32
+ u_long nOne = 1;
+ if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR) {
+#else
+ int fFlags = fcntl(hSocket, F_GETFL, 0);
+ if (fcntl(hSocket, F_SETFL, fFlags | O_NONBLOCK) == SOCKET_ERROR) {
+#endif
+ return false;
+ }
+
+ return true;
+}
+
bool Sock::IsSelectable() const
{
#if defined(USE_POLL) || defined(WIN32)
diff --git a/src/util/sock.h b/src/util/sock.h
index ab9c6737c6..b97977da95 100644
--- a/src/util/sock.h
+++ b/src/util/sock.h
@@ -273,6 +273,9 @@ 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);