diff --git a/sys/sio.hpp b/sys/sio.hpp
index ff068075561657c754cecf8abf78fba48a04a36b..9b98c56ae85b3df2755ac8a0ad039fda73ec923d 100644
--- a/sys/sio.hpp
+++ b/sys/sio.hpp
@@ -33,7 +33,7 @@ namespace rlib {
 
 
 namespace rlib {
-    // Both POSIX and Win32
+    // Both POSIX and Win32. Note what MinGW32 does not have POSIX support, so network operations will not compile on them. 
     using rlib::literals::operator "" _format;
     static inline sockfd_t quick_accept(sockfd_t sock) {
         auto res = accept(sock, NULL, NULL);
@@ -219,10 +219,14 @@ namespace rlib {
             if (listenfd == -1)
                 continue;
             int reuse = 1;
+#ifdef SO_REUSEADDR
             if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const char *) &reuse, sizeof(int)) < 0)
                 throw std::runtime_error("setsockopt(SO_REUSEADDR) failed");
+#endif
+#ifdef SO_REUSEPORT
             if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEPORT, (const char *) &reuse, sizeof(int)) < 0)
                 throw std::runtime_error("setsockopt(SO_REUSEPORT) failed");
+#endif
             if (bind(listenfd, rp->ai_addr, rp->ai_addrlen) == 0) {
                 success = true;
                 break;
@@ -267,10 +271,14 @@ namespace rlib {
             if (sockfd == -1)
                 continue;
             int reuse = 1;
+#ifdef SO_REUSEADDR
             if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *) &reuse, sizeof(int)) < 0)
                 throw std::runtime_error("setsockopt(SO_REUSEADDR) failed");
+#endif
+#ifdef SO_REUSEPORT
             if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (const char *) &reuse, sizeof(int)) < 0)
                 throw std::runtime_error("setsockopt(SO_REUSEPORT) failed");
+#endif
             if (connect(sockfd, rp->ai_addr, rp->ai_addrlen) == 0) {
                 success = true;
                 break; /* Success */