Skip to content

Commit 02375ed

Browse files
committed
close socket in connect() function
1 parent 47987a4 commit 02375ed

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

modules/core/src/jvmMain/kotlin/fr/acinq/lightning/io/JvmTcpSocket.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -164,23 +164,25 @@ internal actual object PlatformSocketBuilder : TcpSocket.Builder {
164164
actual override suspend fun connect(host: String, port: Int, tls: TcpSocket.TLS, loggerFactory: LoggerFactory): TcpSocket {
165165
val logger = loggerFactory.newLogger(this::class)
166166
return withContext(Dispatchers.IO) {
167+
var socket: Socket? = null
167168
try {
168-
val socket = aSocket(SelectorManager(Dispatchers.IO)).tcp().connect(host, port).let { socket ->
169+
socket = aSocket(SelectorManager(Dispatchers.IO)).tcp().connect(host, port).let {
169170
when (tls) {
170-
is TcpSocket.TLS.TRUSTED_CERTIFICATES -> socket.tls(tlsContext(logger))
171-
TcpSocket.TLS.UNSAFE_CERTIFICATES -> socket.tls(tlsContext(logger)) {
171+
is TcpSocket.TLS.TRUSTED_CERTIFICATES -> it.tls(tlsContext(logger))
172+
TcpSocket.TLS.UNSAFE_CERTIFICATES -> it.tls(tlsContext(logger)) {
172173
logger.warning { "using unsafe TLS!" }
173174
trustManager = JvmTcpSocket.unsafeX509TrustManager()
174175
}
175176
is TcpSocket.TLS.PINNED_PUBLIC_KEY -> {
176177
logger.info { "using certificate pinning for connections with $host" }
177-
socket.tls(tlsContext(logger), JvmTcpSocket.tlsConfigForPinnedCert(tls.pubKey, logger))
178+
it.tls(tlsContext(logger), JvmTcpSocket.tlsConfigForPinnedCert(tls.pubKey, logger))
178179
}
179-
else -> socket
180+
else -> it
180181
}
181182
}
182183
JvmTcpSocket(socket, loggerFactory)
183184
} catch (e: Exception) {
185+
socket?.dispose()
184186
throw when (e) {
185187
is ConnectException -> TcpSocket.IOException.ConnectionRefused(e)
186188
is SocketException -> TcpSocket.IOException.Unknown(e.message, e)

modules/core/src/nativeMain/kotlin/fr/acinq/lightning/io/KtorNoTlsTcpSocket.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,23 @@ class KtorNoTlsTcpSocket(private val socket: Socket) : TcpSocket {
7474
internal object KtorSocketBuilder : TcpSocket.Builder {
7575
override suspend fun connect(host: String, port: Int, tls: TcpSocket.TLS, loggerFactory: LoggerFactory): TcpSocket {
7676
return withContext(Dispatchers.IO) {
77+
var socket: Socket? = null
7778
try {
78-
val socket = aSocket(SelectorManager(Dispatchers.IO)).tcp().connect(host, port,
79+
socket = aSocket(SelectorManager(Dispatchers.IO)).tcp().connect(
80+
host, port,
7981
configure = {
8082
keepAlive = true
8183
socketTimeout = 15.seconds.inWholeMilliseconds
8284
noDelay = true
83-
}).let { socket ->
85+
}).let {
8486
when (tls) {
85-
is TcpSocket.TLS.DISABLED -> socket
87+
is TcpSocket.TLS.DISABLED -> it
8688
else -> TODO("TLS not supported")
8789
}
8890
}
8991
KtorNoTlsTcpSocket(socket)
9092
} catch (e: Exception) {
93+
socket?.dispose()
9194
throw e
9295
}
9396
}

0 commit comments

Comments
 (0)