StopPeerForError disconnects from a peer due to external error. If the peer is persistent, it will attempt to reconnect. TODO: make record depending on reason.
(peer Peer, reason interface{})
| 365 | // If the peer is persistent, it will attempt to reconnect. |
| 366 | // TODO: make record depending on reason. |
| 367 | func (sw *Switch) StopPeerForError(peer Peer, reason interface{}) { |
| 368 | if !peer.IsRunning() { |
| 369 | return |
| 370 | } |
| 371 | |
| 372 | sw.Logger.Error("Stopping peer for error", "peer", peer, "err", reason) |
| 373 | sw.stopAndRemovePeer(peer, reason) |
| 374 | |
| 375 | if peer.IsPersistent() { |
| 376 | var addr *NetAddress |
| 377 | if peer.IsOutbound() { // socket address for outbound peers |
| 378 | addr = peer.SocketAddr() |
| 379 | } else { // self-reported address for inbound peers |
| 380 | var err error |
| 381 | addr, err = peer.NodeInfo().NetAddress() |
| 382 | if err != nil { |
| 383 | sw.Logger.Error("Wanted to reconnect to inbound peer, but self-reported address is wrong", |
| 384 | "peer", peer, "err", err) |
| 385 | return |
| 386 | } |
| 387 | } |
| 388 | go sw.reconnectToPeer(addr) |
| 389 | } |
| 390 | } |
| 391 | |
| 392 | // StopPeerGracefully disconnects from a peer gracefully. |
| 393 | // TODO: handle graceful disconnects. |