Fix native CLI TCP regression path
This commit is contained in:
1 parent
aa1b74620e
commit
402b8bb1b3
14 files changed
+204
-22
No files matched your search
@@ -40,7 +40,10 @@ private class NativeKtorNetEngine(
|
||||
override val isTcpServerAvailable: Boolean,
|
||||
override val isUdpAvailable: Boolean,
|
||||
) : LyngNetEngine {
|
||||
private val selectorManager: SelectorManager by lazy { SelectorManager(Dispatchers.Default) }
|
||||
private var selectorManager: SelectorManager? = null
|
||||
|
||||
private fun selectorManager(): SelectorManager =
|
||||
selectorManager ?: SelectorManager(Dispatchers.Default).also { selectorManager = it }
|
||||
|
||||
override suspend fun resolve(host: String, port: Int): List<LyngSocketAddress> {
|
||||
val rawAddress = InetSocketAddress(host, port).resolveAddress()
|
||||
@@ -62,7 +65,7 @@ private class NativeKtorNetEngine(
|
||||
noDelay: Boolean,
|
||||
): LyngTcpSocket {
|
||||
val connectBlock: suspend () -> Socket = {
|
||||
aSocket(selectorManager).tcp().connect(host, port) {
|
||||
aSocket(selectorManager()).tcp().connect(host, port) {
|
||||
this.noDelay = noDelay
|
||||
}
|
||||
}
|
||||
@@ -77,7 +80,7 @@ private class NativeKtorNetEngine(
|
||||
reuseAddress: Boolean,
|
||||
): LyngTcpServer {
|
||||
val bindHost = host ?: "0.0.0.0"
|
||||
val server = aSocket(selectorManager).tcp().bind(bindHost, port) {
|
||||
val server = aSocket(selectorManager()).tcp().bind(bindHost, port) {
|
||||
backlogSize = backlog
|
||||
this.reuseAddress = reuseAddress
|
||||
}
|
||||
@@ -86,11 +89,16 @@ private class NativeKtorNetEngine(
|
||||
|
||||
override suspend fun udpBind(host: String?, port: Int, reuseAddress: Boolean): LyngUdpSocket {
|
||||
val bindHost = host ?: "0.0.0.0"
|
||||
val socket = aSocket(selectorManager).udp().bind(bindHost, port) {
|
||||
val socket = aSocket(selectorManager()).udp().bind(bindHost, port) {
|
||||
this.reuseAddress = reuseAddress
|
||||
}
|
||||
return NativeLyngUdpSocket(socket)
|
||||
}
|
||||
|
||||
fun shutdown() {
|
||||
selectorManager?.close()
|
||||
selectorManager = null
|
||||
}
|
||||
}
|
||||
|
||||
private class NativeLyngTcpSocket(
|
||||
@@ -214,3 +222,7 @@ private fun ByteArray.toIpHostString(): String = when (size) {
|
||||
}
|
||||
else -> error("Unsupported IP address length: $size")
|
||||
}
|
||||
|
||||
internal fun shutdownNativeKtorNetEngine(engine: LyngNetEngine) {
|
||||
(engine as? NativeKtorNetEngine)?.shutdown()
|
||||
}
|
||||
Reference in new issue
Block a user