Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
771f6439
Commit
771f6439
authored
Jun 10, 2014
by
Maran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Stop peers when they don't respond to ping/pong. Might fix ethereum/go-ethereum#78
parent
d8339fa2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
12 additions
and
3 deletions
+12
-3
peer.go
peer.go
+12
-3
No files found.
peer.go
View file @
771f6439
...
...
@@ -18,6 +18,8 @@ const (
outputBufferSize
=
50
// Current protocol version
ProtocolVersion
=
17
// Interval for ping/pong message
pingPongTimer
=
30
*
time
.
Second
)
type
DiscReason
byte
...
...
@@ -243,7 +245,7 @@ func (p *Peer) writeMessage(msg *ethwire.Msg) {
err
:=
ethwire
.
WriteMessage
(
p
.
conn
,
msg
)
if
err
!=
nil
{
ethutil
.
Config
.
Log
.
Debugln
(
"Can't send message:"
,
err
)
ethutil
.
Config
.
Log
.
Debugln
(
"
[PEER]
Can't send message:"
,
err
)
// Stop the client if there was an error writing to it
p
.
Stop
()
return
...
...
@@ -253,7 +255,7 @@ func (p *Peer) writeMessage(msg *ethwire.Msg) {
// Outbound message handler. Outbound messages are handled here
func
(
p
*
Peer
)
HandleOutbound
()
{
// The ping timer. Makes sure that every 2 minutes a ping is send to the peer
pingTimer
:=
time
.
NewTicker
(
30
*
time
.
Second
)
pingTimer
:=
time
.
NewTicker
(
pingPongTimer
)
serviceTimer
:=
time
.
NewTicker
(
5
*
time
.
Minute
)
out
:
...
...
@@ -264,8 +266,14 @@ out:
p
.
writeMessage
(
msg
)
p
.
lastSend
=
time
.
Now
()
// Ping timer
sends a ping to the peer each 2 minutes
// Ping timer
case
<-
pingTimer
.
C
:
timeSince
:=
time
.
Since
(
time
.
Unix
(
p
.
lastPong
,
0
))
if
p
.
pingStartTime
.
IsZero
()
==
false
&&
timeSince
>
(
pingPongTimer
+
10
*
time
.
Second
)
{
ethutil
.
Config
.
Log
.
Infof
(
"[PEER] Peer did not respond to latest pong fast enough, it took %s, disconnecting.
\n
"
,
timeSince
)
p
.
Stop
()
return
}
p
.
writeMessage
(
ethwire
.
NewMessage
(
ethwire
.
MsgPingTy
,
""
))
p
.
pingStartTime
=
time
.
Now
()
...
...
@@ -563,6 +571,7 @@ func (p *Peer) Stop() {
// Pre-emptively remove the peer; don't wait for reaping. We already know it's dead if we are here
p
.
ethereum
.
RemovePeer
(
p
)
ethutil
.
Config
.
Log
.
Debugln
(
"[PEER] Stopped peer:"
,
p
.
conn
.
RemoteAddr
())
}
func
(
p
*
Peer
)
pushHandshake
()
error
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment