diff --git a/src/net/socketaddress.hpp b/src/net/socketaddress.hpp
index 7a32f2883dda101db28bc82939ac1e5bee7e159f..ccb0c76c896b0d20640a51773ab3e717c37c08bc 100644
--- a/src/net/socketaddress.hpp
+++ b/src/net/socketaddress.hpp
@@ -10,6 +10,7 @@
 
 #include <functional>
 
+#include "macros.hpp"
 #include "net/netio_exception.hpp"
 
 #ifdef __linux__
@@ -80,17 +81,24 @@ public:
     }
 
     template <typename T>
-    socketaddr &operator=(T *rhs) {
+    socketaddr& operator=(const T *rhs) {
         if (rhs->*(family_map<T>::sa_family_field) != family_map<T>::sa_family) {
             throw netio_exception("Address family mismatch in sockaddr structure.");
         }
 
         memcpy(&addr, rhs, sizeof(T));
         len = sizeof(T);
+
+COMPILER_SUPRESS("-Weffc++");
+        return *this;
+COMPILER_RESTORE("-Weffc++");
     }
 
-    socketaddr &operator=(sockaddr_storage *rhs) {
-        return *this = (sockaddr*)rhs;
+    socketaddr& operator=(const sockaddr_storage *rhs) {
+        *this = (sockaddr*)rhs;
+COMPILER_SUPRESS("-Weffc++");
+        return *this;
+COMPILER_RESTORE("-Weffc++");
     }
 
     socketaddr& operator=(sockaddr *rhs) {