diff options
author | Vasil Dimov <vd@FreeBSD.org> | 2022-07-05 12:20:42 +0200 |
---|---|---|
committer | Vasil Dimov <vd@FreeBSD.org> | 2022-07-20 16:26:24 +0200 |
commit | 29f66f76826056f53d971ac734b7ed49b39848d3 (patch) | |
tree | 6bb5fe27880dc8c584ce7297afdbc654610975a7 /src/util | |
parent | b4bac556791b5bb8aa118d4c1fed42c3fe45550c (diff) |
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.cpp | 15 | ||||
-rw-r--r-- | src/util/sock.h | 3 |
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); |