diff --git a/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt
index ea1f39372ceabb0fe9c2b24f516ae6c7547da004..809ee6e9e3e5b158004357d57d87dd75490b0653 100644
--- a/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt
+++ b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt
@@ -24,14 +24,14 @@ public actual class ClientSocket actual constructor(
 
     init {
         memScoped {
-            val ip = getaddrinfo(address, port.toString()) ?: throw IOException("Failed resolving address")
+            val ipLen = getaddrinfo(address, port.toString()) ?: throw IOException("Failed resolving address")
 
             if (set_send_socket_timeout(socket, connectTimeOut.convert()) == -1) {
                 socketsCleanup()
                 throw IOException("Socket connect timeout set failed, error ${getErrno()}")
             }
 
-            if (connect(socket, ip, sizeOf<sockaddr_in>().convert()) == -1) {
+            if (connect(socket, ipLen.first, ipLen.second) == -1) {
                 socketsCleanup()
                 throw IOException("Socket connect failed, error ${getErrno()}")
             }
diff --git a/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt
index ce4fca96f4cb78961766218449355b8c316a4cb3..9791631dba9089a1d875d7cdb02ac62524be8516 100644
--- a/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt
+++ b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt
@@ -27,14 +27,14 @@ public actual class TLSClientSocket actual constructor(
 
     init {
         memScoped {
-            val ip = getaddrinfo(address, port.toString()) ?: throw IOException("Failed resolving address")
+            val ipLen = getaddrinfo(address, port.toString()) ?: throw IOException("Failed resolving address")
 
             if (set_send_socket_timeout(socket, connectTimeOut.convert()) == -1) {
                 socketsCleanup()
                 throw IOException("Socket connect timeout set failed, error ${getErrno()}")
             }
 
-            if (connect(socket, ip, sizeOf<sockaddr_in>().convert()) == -1) {
+            if (connect(socket, ipLen.first, ipLen.second) == -1) {
                 socketsCleanup()
                 throw IOException("Socket connect failed, error ${getErrno()}")
             }
diff --git a/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index 2fa6eeb7d73863f31722128958e29f74b6bd29a2..69f3353593b077498b27e7934ba9b07baf59b15b 100644
--- a/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -137,7 +137,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -145,7 +145,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt
index 5135fd5535fc96c8b14bf4c0ca5b0b90b6708b27..9837ead73b72c7f236832f4bcabfd6bae9e35fb3 100644
--- a/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -137,7 +137,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -145,7 +145,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt
index 981d73f95f4e7ada793c875efe19cef13a01f3d8..ba16fee8ea3d8186128b4d463ca89043004d4927 100644
--- a/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -161,7 +161,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutValue.ptr, sizeOf<uint32_tVar>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_INET
@@ -169,7 +169,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!.toUInt())
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt
index a2f680cf471b32636fa2cc9b1383728e2ab6e8d0..9f76c29108604db23f10aa3f98ff8cf3e3051b95 100644
--- a/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt
@@ -97,7 +97,7 @@ public expect fun MemScope.select(
     timeout: Long
 ): Int
 
-public expect fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>?
+public expect fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>?
 
 public expect fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>)
 
diff --git a/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt
index c1fe27635dec023d886c6a06d750db25818386ce..da469ecefcf06275707457e92e919e6cf497c2b5 100644
--- a/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt
index ee623301dca3bd92a2131dc57d621a76ca9a9b5b..5b365d581ef53b1769d728202942308f48b90306 100644
--- a/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index ee623301dca3bd92a2131dc57d621a76ca9a9b5b..5b365d581ef53b1769d728202942308f48b90306 100644
--- a/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
index ee623301dca3bd92a2131dc57d621a76ca9a9b5b..5b365d581ef53b1769d728202942308f48b90306 100644
--- a/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }
diff --git a/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt
index ee623301dca3bd92a2131dc57d621a76ca9a9b5b..5b365d581ef53b1769d728202942308f48b90306 100644
--- a/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt
+++ b/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt
@@ -145,7 +145,7 @@ public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): In
     return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt())
 }
 
-public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? {
+public actual fun MemScope.getaddrinfo(name: String, service: String?): Pair<CPointer<sockaddr>, UInt>? {
     val hints = alloc<addrinfo>()
     platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert())
     hints.ai_family = platform.posix.AF_UNSPEC
@@ -153,7 +153,11 @@ public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer
     hints.ai_protocol = platform.posix.IPPROTO_TCP
     val result = alloc<CPointerVar<addrinfo>>()
     if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) {
-        return result.pointed?.ai_addr
+        return if (result.pointed != null && result.pointed?.ai_addr != null && result.pointed?.ai_addrlen != null) {
+            Pair(result.pointed?.ai_addr!!, result.pointed?.ai_addrlen!!)
+        } else {
+            null
+        }
     }
     return null
 }