summaryrefslogtreecommitdiff
path: root/src/network/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/core')
-rw-r--r--src/network/core/os_abstraction.cpp49
-rw-r--r--src/network/core/os_abstraction.h53
2 files changed, 52 insertions, 50 deletions
diff --git a/src/network/core/os_abstraction.cpp b/src/network/core/os_abstraction.cpp
index 75f2224eb..b2d3475d0 100644
--- a/src/network/core/os_abstraction.cpp
+++ b/src/network/core/os_abstraction.cpp
@@ -123,3 +123,52 @@ bool NetworkError::HasError() const
return NetworkError(errno);
#endif
}
+
+
+/**
+ * Try to set the socket into non-blocking mode.
+ * @param d The socket to set the non-blocking more for.
+ * @return True if setting the non-blocking mode succeeded, otherwise false.
+ */
+bool SetNonBlocking(SOCKET d)
+{
+#if defined(_WIN32)
+ u_long nonblocking = 1;
+ return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
+#elif defined __EMSCRIPTEN__
+ return true;
+#else
+ int nonblocking = 1;
+ return ioctl(d, FIONBIO, &nonblocking) == 0;
+#endif
+}
+
+/**
+ * Try to set the socket to not delay sending.
+ * @param d The socket to disable the delaying for.
+ * @return True if disabling the delaying succeeded, otherwise false.
+ */
+bool SetNoDelay(SOCKET d)
+{
+#ifdef __EMSCRIPTEN__
+ return true;
+#else
+ int flags = 1;
+ /* The (const char*) cast is needed for windows */
+ return setsockopt(d, IPPROTO_TCP, TCP_NODELAY, (const char *)&flags, sizeof(flags)) == 0;
+#endif
+}
+
+/**
+ * Get the error from a socket, if any.
+ * @param d The socket to get the error from.
+ * @return The errno on the socket.
+ */
+NetworkError GetSocketError(SOCKET d)
+{
+ int err;
+ socklen_t len = sizeof(err);
+ getsockopt(d, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
+
+ return NetworkError(err);
+}
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index e444bc78b..55d733501 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -66,7 +66,6 @@ typedef unsigned long in_addr_t;
# endif
# define SOCKET int
# define INVALID_SOCKET -1
-# define ioctlsocket ioctl
# define closesocket close
/* Need this for FIONREAD on solaris */
# define BSD_COMP
@@ -115,7 +114,6 @@ typedef unsigned long in_addr_t;
#if defined(__OS2__)
# define SOCKET int
# define INVALID_SOCKET -1
-# define ioctlsocket ioctl
# define closesocket close
/* Includes needed for OS/2 systems */
@@ -188,55 +186,10 @@ static inline socklen_t FixAddrLenForEmscripten(struct sockaddr_storage &address
}
#endif
-/**
- * Try to set the socket into non-blocking mode.
- * @param d The socket to set the non-blocking more for.
- * @return True if setting the non-blocking mode succeeded, otherwise false.
- */
-static inline bool SetNonBlocking(SOCKET d)
-{
-#ifdef __EMSCRIPTEN__
- return true;
-#else
-# ifdef _WIN32
- u_long nonblocking = 1;
-# else
- int nonblocking = 1;
-# endif
- return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
-#endif
-}
-/**
- * Try to set the socket to not delay sending.
- * @param d The socket to disable the delaying for.
- * @return True if disabling the delaying succeeded, otherwise false.
- */
-static inline bool SetNoDelay(SOCKET d)
-{
-#ifdef __EMSCRIPTEN__
- return true;
-#else
- /* XXX should this be done at all? */
- int b = 1;
- /* The (const char*) cast is needed for windows */
- return setsockopt(d, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b)) == 0;
-#endif
-}
-
-/**
- * Get the error from a socket, if any.
- * @param d The socket to get the error from.
- * @return The errno on the socket.
- */
-static inline NetworkError GetSocketError(SOCKET d)
-{
- int err;
- socklen_t len = sizeof(err);
- getsockopt(d, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
-
- return NetworkError(err);
-}
+bool SetNonBlocking(SOCKET d);
+bool SetNoDelay(SOCKET d);
+NetworkError GetSocketError(SOCKET d);
/* Make sure these structures have the size we expect them to be */
static_assert(sizeof(in_addr) == 4); ///< IPv4 addresses should be 4 bytes.