diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index d4fc6d0..f4e6ce2 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
| @@ -2190,6 +2190,18 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) | |||
| 2190 | } | 2190 | } |
| 2191 | 2191 | ||
| 2192 | 2192 | ||
| 2193 | else if (strCommand == "ping") | ||
| 2194 | { | ||
| 2195 | // Nothing to do and nothing to answer. Arriving at all is the entire | ||
| 2196 | // content of the message: the receive path has already stamped | ||
| 2197 | // nLastRecv, which is what the sender wanted us to notice. | ||
| 2198 | // | ||
| 2199 | // Deliberately no reply. A node old enough not to know "ping" ignores | ||
| 2200 | // it as an unknown command and would never answer one, so a scheme | ||
| 2201 | // that required an answer would read every such peer as dead. | ||
| 2202 | } | ||
| 2203 | |||
| 2204 | |||
| 2193 | else | 2205 | else |
| 2194 | { | 2206 | { |
| 2195 | // Ignore unknown commands for extensibility | 2207 | // Ignore unknown commands for extensibility |
| @@ -2222,6 +2234,17 @@ bool SendMessages(CNode* pto) | |||
| 2222 | 2234 | ||
| 2223 | 2235 | ||
| 2224 | // | 2236 | // |
| 2237 | // Message: keep-alive ping | ||
| 2238 | // | ||
| 2239 | // Only when we have nothing else queued -- any real message serves the | ||
| 2240 | // same purpose. A peer with nothing to relay is otherwise silent, and | ||
| 2241 | // silence is exactly what the inactivity check disconnects on. | ||
| 2242 | // | ||
| 2243 | if (pto->nLastSend && GetTime() - pto->nLastSend > BTF_PING_INTERVAL_SECS && pto->vSend.empty()) | ||
| 2244 | pto->PushMessage("ping"); | ||
| 2245 | |||
| 2246 | |||
| 2247 | // | ||
| 2225 | // Message: inventory | 2248 | // Message: inventory |
| 2226 | // | 2249 | // |
| 2227 | vector<CInv> vInventoryToSend; | 2250 | vector<CInv> vInventoryToSend; |