From 65c375ef379f8b9553b4bc5f8e1798f3d4aeae71 Mon Sep 17 00:00:00 2001 From: davidepianca98 <davidepianca98@gmail.com> Date: Sat, 11 Jan 2025 15:42:52 +0100 Subject: [PATCH] Use the correct data length for the address struct in Posix client socket --- .../kotlin/io/github/davidepianca98/ClientSocket.kt | 4 ++-- .../kotlin/io/github/davidepianca98/TLSClientSocket.kt | 4 ++-- .../iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../iosX64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../macosX64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../posixMain/kotlin/io/github/davidepianca98/Posix.kt | 2 +- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- .../kotlin/io/github/davidepianca98/Posix.kt | 8 ++++++-- 18 files changed, 95 insertions(+), 35 deletions(-) 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 ea1f393..809ee6e 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 ce4fca9..9791631 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 c1fe276..da469ec 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 c1fe276..da469ec 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 c1fe276..da469ec 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 2fa6eeb..69f3353 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 5135fd5..9837ead 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 c1fe276..da469ec 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 c1fe276..da469ec 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 981d73f..ba16fee 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 a2f680c..9f76c29 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 c1fe276..da469ec 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 c1fe276..da469ec 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 c1fe276..da469ec 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 ee62330..5b365d5 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 ee62330..5b365d5 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 ee62330..5b365d5 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 ee62330..5b365d5 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 } -- GitLab