On Wed, Feb 27, 2002 at 12:24:48AM +0100, Carlo Wood wrote: > [2002-2-27 0:19:36] DEBUG [DEBUG]: Client Parsing: PRIVMSG #test >:----------------------------------------- > [2002-2-27 0:19:36] DEBUG [DEBUG]: poll: delay: 1014765621 (1014765576) 45000 > [2002-2-27 0:20:21] DEBUG [DEBUG]: poll: delay: 1014765681 (1014765621) 60000 > [2002-2-27 0:21:21] DEBUG [DEBUG]: poll: delay: 1014765682 (1014765681) 1000 > [2002-2-27 0:21:22] DEBUG [DEBUG]: Client Run2 Ping 10 > [2002-2-27 0:21:22] DEBUG [DEBUG]: check_pings(Run2)=status:[] limit: 10 current: 106 > [2002-2-27 0:21:22] DEBUG [DEBUG]: Sending [0x08283948] to Run2 > [2002-2-27 0:21:22] DEBUG [DEBUG]: Adding buffer 0x08283948 [ERROR :Closing Link: >Run2 by 2.testnet.org (Ping timeout)] to normal queue > > It never sent a PING.
The following patch fixes this problem: [2002-2-27 0:28:42] DEBUG [DEBUG]: Client Parsing: PRIVMSG #test :======================================================= [2002-2-27 0:28:42] DEBUG [DEBUG]: poll: delay: 1014766170 (1014766122) 48000 [2002-2-27 0:29:30] DEBUG [DEBUG]: poll: delay: 1014766230 (1014766170) 60000 [2002-2-27 0:30:30] DEBUG [DEBUG]: poll: delay: 1014766231 (1014766230) 1000 [2002-2-27 0:30:31] DEBUG [DEBUG]: Client Run2 Ping 10 [2002-2-27 0:30:31] DEBUG [DEBUG]: check_pings(Run2)=status:[] limit: 10 current: 109 [2002-2-27 0:30:31] DEBUG [DEBUG]: Sending [0x08283b60] to Run2 [2002-2-27 0:30:31] DEBUG [DEBUG]: Adding buffer 0x08283b60 [PING :2.afternet.org] to normal queue [2002-2-27 0:30:31] DEBUG [DEBUG]: [1014766231] check_pings() again in 10s [2002-2-27 0:30:31] DEBUG [DEBUG]: poll: delay: 1014766241 (1014766231) 10000 [2002-2-27 0:30:31] DEBUG [DEBUG]: Sending queued data to Run2 [2002-2-27 0:30:31] DEBUG [DEBUG]: poll: delay: 1014766241 (1014766231) 10000 [2002-2-27 0:30:31] DEBUG [DEBUG]: Reading data from Run2 [2002-2-27 0:30:31] DEBUG [DEBUG]: Client Parsing: PONG 2.afternet.org [2002-2-27 0:30:31] DEBUG [DEBUG]: poll: delay: 1014766241 (1014766231) 10000 [2002-2-27 0:30:41] DEBUG [DEBUG]: Client Run2 Ping 10 [2002-2-27 0:30:41] DEBUG [DEBUG]: check_pings(Run2)=status:[] limit: 10 current: 10 [2002-2-27 0:30:41] DEBUG [DEBUG]: Sending [0x08283b60] to Run2 [2002-2-27 0:30:41] DEBUG [DEBUG]: Adding buffer 0x08283b60 [PING :2.afternet.org] to normal queue [2002-2-27 0:30:41] DEBUG [DEBUG]: [1014766241] check_pings() again in 10s [2002-2-27 0:30:41] DEBUG [DEBUG]: poll: delay: 1014766251 (1014766241) 10000 [2002-2-27 0:30:41] DEBUG [DEBUG]: Sending queued data to Run2 [2002-2-27 0:30:41] DEBUG [DEBUG]: poll: delay: 1014766251 (1014766241) 10000 [2002-2-27 0:30:41] DEBUG [DEBUG]: Reading data from Run2 [2002-2-27 0:30:41] DEBUG [DEBUG]: Client Parsing: PONG 2.afternet.org [2002-2-27 0:30:41] DEBUG [DEBUG]: poll: delay: 1014766251 (1014766241) 10000 Basically I just moved the code 'Ping timeout' code below the part that checks if a PING was sent at all. ChangeLog: 2002-02-27 Carlo Wood <[EMAIL PROTECTED]> * /ircd/ircd.c: check_pings: First check if a PING was sent at all. -- Carlo Wood <[EMAIL PROTECTED]>
Index: ircd.c =================================================================== RCS file: /home/coder-com/cvs/ircu2.10/ircd/ircd.c,v retrieving revision 1.53 diff -u -d -p -r1.53 ircd.c --- ircd.c 2002/02/19 21:28:36 1.53 +++ ircd.c 2002/02/26 23:43:55 @@ -353,17 +353,6 @@ static void check_pings(struct Event* ev continue; } - /* Quit the client after max_ping*2 - they should have answered by now */ - if (CurrentTime-cli_lasttime(cptr) >= (max_ping*2) ) { - /* If it was a server, then tell ops about it. */ - if (IsServer(cptr) || IsConnecting(cptr) || IsHandshake(cptr)) - sendto_opmask_butone(0, SNO_OLDSNO, - "No response from %s, closing link", - cli_name(cptr)); - exit_client_msg(cptr, cptr, &me, "Ping timeout"); - continue; - } - /* Unregistered clients pingout after max_ping seconds, they don't * get given a second chance - if they were then people could not quite * finish registration and hold resources without being subject to k/g @@ -397,6 +386,17 @@ static void check_pings(struct Event* ev sendrawto_one(cptr, MSG_PING " :%s", cli_name(&me)); else sendcmdto_one(&me, CMD_PING, cptr, ":%s", cli_name(&me)); + } + + /* Quit the client after max_ping*2 - they should have answered by now */ + if (CurrentTime-cli_lasttime(cptr) >= (max_ping*2) ) { + /* If it was a server, then tell ops about it. */ + if (IsServer(cptr) || IsConnecting(cptr) || IsHandshake(cptr)) + sendto_opmask_butone(0, SNO_OLDSNO, + "No response from %s, closing link", + cli_name(cptr)); + exit_client_msg(cptr, cptr, &me, "Ping timeout"); + continue; } expire = cli_lasttime(cptr) + max_ping * 2;