From 16879f3db2bfd4e1a5d35892db5556247a3bb0da Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 28 Jan 2012 16:48:08 +0100 Subject: [PATCH] Don't lose output when client shuts down input transmission player_login() skips sending C_EXIT and flushing server output when io_eof() is true. That's the case after a read from the socket returned zero, which means the client has shut down transmission on his socket, or closed it. If it's the former, then dropping output like that is bad. Our client never does that, but others might. Condition was introduced in Empire 2, don't know why. --- src/lib/player/login.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/lib/player/login.c b/src/lib/player/login.c index 99cba662..d4220012 100644 --- a/src/lib/player/login.c +++ b/src/lib/player/login.c @@ -121,10 +121,8 @@ player_login(void *ud) } } player->state = PS_SHUTDOWN; - if (!io_eof(player->iop)) { - pr_id(player, C_EXIT, "so long...\n"); - while (io_output(player->iop, 1) > 0) ; - } + pr_id(player, C_EXIT, "so long...\n"); + while (io_output(player->iop, 1) > 0) ; player_delete(player); empth_exit(); /*NOTREACHED*/ @@ -384,7 +382,6 @@ kill_cmd(void) static int quit_cmd(void) { - pr_id(player, C_EXIT, "so long\n"); io_shutdown(player->iop, IO_READ); return RET_OK; }