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 }