Send a PING at the end of the server sync to detect it
At the end of sending all "state" to the remote server, a PING command is sent to request a PONG reply. Until then, no "regual" PING was sent, so Conn_LastPing(<connection>) is null and now becomes non-null in the PONG command handler. So the servers are still synchronizing when Conn_LastPing(<connection>) is 0, which could easily be tested.
This commit is contained in:
parent
5a200e1543
commit
bc20f9ec10
|
@ -889,15 +889,16 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
if (conn > NONE)
|
||||
Log(LOG_DEBUG,
|
||||
"Connection %d: received PONG. Lag: %ld seconds.", conn,
|
||||
time(NULL) - Conn_LastPing(Client_Conn(Client)));
|
||||
else
|
||||
Log(LOG_DEBUG,
|
||||
"Connection %d: received PONG.", conn);
|
||||
#endif
|
||||
if (Client_Type(Client) == CLIENT_SERVER && Conn_LastPing(conn) == 0) {
|
||||
Log(LOG_INFO,
|
||||
"Synchronization with \"%s\" done (connection %d): %ld seconds [%ld users, %ld channels]",
|
||||
Client_ID(Client), conn, time(NULL) - Conn_GetSignon(conn),
|
||||
Client_UserCount(), Channel_CountVisible(NULL));
|
||||
Conn_UpdatePing(conn);
|
||||
} else
|
||||
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
|
||||
conn, time(NULL) - Conn_LastPing(conn));
|
||||
|
||||
return CONNECTED;
|
||||
} /* IRC_PONG */
|
||||
|
||||
|
|
|
@ -384,6 +384,10 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!IRC_WriteStrClient(Client, "PING :%s",
|
||||
Client_ID(Client_ThisServer())))
|
||||
return DISCONNECTED;
|
||||
|
||||
return CONNECTED;
|
||||
} /* IRC_Num_ENDOFMOTD */
|
||||
|
||||
|
|
Loading…
Reference in New Issue