From 2a05650ac8e6e8d5017f14df524a7219b335fb19 Mon Sep 17 00:00:00 2001 From: Daan Vanden Bosch Date: Sun, 15 Aug 2021 16:54:29 +0200 Subject: [PATCH] Better disconnection logging in psoserv. --- .../phantasmal/psoserv/servers/ProxyServer.kt | 5 +++++ .../phantasmal/psoserv/servers/SocketHandler.kt | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/ProxyServer.kt b/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/ProxyServer.kt index d684bb90..88d3e339 100644 --- a/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/ProxyServer.kt +++ b/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/ProxyServer.kt @@ -4,6 +4,7 @@ import world.phantasmal.psolib.buffer.Buffer import world.phantasmal.psoserv.encryption.Cipher import world.phantasmal.psoserv.messages.* import java.net.Socket +import java.net.SocketException class ProxyServer( name: String, @@ -129,5 +130,9 @@ class ProxyServer( override fun logMessageReceived(message: Message) { logger.trace { "Sent $message." } } + + override fun logUnexpectedSocketException(e: SocketException) { + // Do nothing, we expect both server and client to close connections. + } } } diff --git a/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/SocketHandler.kt b/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/SocketHandler.kt index bdc02f3c..ffad93e1 100644 --- a/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/SocketHandler.kt +++ b/psoserv/src/main/kotlin/world/phantasmal/psoserv/servers/SocketHandler.kt @@ -37,6 +37,7 @@ abstract class SocketHandler( fun listen() { logger.info { "Listening to $name ($sockName)." } running = true + var clientDisconnected = false try { val readBuffer = Buffer.withCapacity(BUFFER_CAPACITY, Endianness.Little) @@ -49,6 +50,7 @@ abstract class SocketHandler( if (readSize == -1) { // Close the connection if no more bytes available. logger.debug { "$name ($sockName) end of stream." } + clientDisconnected = true break@readLoop } @@ -165,6 +167,7 @@ abstract class SocketHandler( } // Close the connection. + clientDisconnected = true break@readLoop } @@ -198,9 +201,8 @@ abstract class SocketHandler( // Don't log if we're not running anymore because that means this exception was probably // generated by a socket.close() call. if (running) { - logger.error(e) { - "Error while listening to $name ($sockName), closing connection." - } + logUnexpectedSocketException(e) + clientDisconnected = true } } catch (e: Throwable) { logger.error(e) { "Error while listening to $name ($sockName), closing connection." } @@ -208,7 +210,7 @@ abstract class SocketHandler( running = false try { - if (socket.isClosed) { + if (socket.isClosed || socket.isInputShutdown || clientDisconnected) { logger.info { "Connection to $name ($sockName) was closed." } } else { logger.info { "Closing connection to $name ($sockName)." } @@ -282,6 +284,12 @@ abstract class SocketHandler( logger.trace { "Received $message." } } + protected open fun logUnexpectedSocketException(e: SocketException) { + logger.error(e) { + "Error while listening to $name ($sockName), closing connection." + } + } + protected enum class ProcessResult { Ok, Changed, Done }