summary refs log tree commit diff
path: root/loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'loop.c')
-rw-r--r--loop.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/loop.c b/loop.c
index 46c585c..c568c6f 100644
--- a/loop.c
+++ b/loop.c
@@ -16,11 +16,11 @@
 
 #include "ircd.h"
 
-#include <string.h>
-
 #include <err.h>
 #include <poll.h>
 #include <signal.h>
+#include <stdio.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
 
@@ -131,19 +131,31 @@ loop:
 		}
 		if (peers[i].ping && now - peers[i].ping > PEER_PONGTIMEOUT)
 		{
-			announce(
-				&peers[i],
-				":%s!%s@%s QUIT :Ping Timeout (%llu seconds)",
-				getnick(&peers[i]),
-				peers[i].user,
-				peers[i].host,
+			snprintf(
+				peers[i].quit,
+				sizeof(PEER_QUIT_MAX),
+				"Ping Timeout (%llu seconds)",
 				now - peers[i].ping
 			);
 			peers[i].flags |= DELETE;
 		}
 		if (peers[i].flags & DELETE)
 		{
-			writef(peers[i].fd, "ERROR :Closing Link: %s", peers[i].host);
+			if (peers[i].type)
+				announce(
+					&peers[i],
+					":%s!%s@%s QUIT :%s",
+					getnick(&peers[i]),
+					peers[i].user,
+					peers[i].host,
+					peers[i].quit
+				);
+			writef(
+				peers[i].fd,
+				"ERROR :Closing Link: %s (%s)",
+				peers[i].host,
+				peers[i].quit
+			);
 			close(peers[i].fd);
 			user_remove(i);
 			--i;