]> git.pond.sub.org Git - empserver/blobdiff - src/lib/player/login.c
Fix player_login() to obey max_idle for output, too
[empserver] / src / lib / player / login.c
index 324d31b5f856757e79bc5aac908abecce35c5126..ba415d8bfb28c441195b90a0ad43bea4ab162208 100644 (file)
@@ -76,7 +76,7 @@ static struct cmndstr login_coms[] = {
 void
 player_login(void *ud)
 {
-    struct timeval timeout;
+    time_t deadline;
     char buf[128];
     char space[128];
     int ac;
@@ -88,11 +88,14 @@ player_login(void *ud)
     pr_id(player, C_INIT, "Empire server ready\n");
 
     for (;;) {
-       io_output(player->iop, 1);
+       deadline = player->curup + minutes(max_idle);
+       if (io_outputwaiting(player->iop)) {
+           if (io_output(player->iop, deadline) <= 0)
+               break;
+           continue;
+       }
        if (io_gets(player->iop, buf, sizeof(buf)) < 0) {
-           timeout.tv_sec = minutes(max_idle);
-           timeout.tv_usec = 0;
-           res = io_input(player->iop, &timeout);
+           res = io_input(player->iop, deadline);
            if (res <= 0) {
                if (res == 0 && !io_eof(player->iop))
                    pr_id(player, C_DATA, "idle connection terminated\n");