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
7ade1778
Commit
7ade1778
authored
Jan 12, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Peer reaping and fake network
parent
52fb3b41
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
45 additions
and
13 deletions
+45
-13
ethereum.go
ethereum.go
+0
-8
peer.go
peer.go
+4
-0
server.go
server.go
+41
-5
No files found.
ethereum.go
View file @
7ade1778
...
...
@@ -72,14 +72,6 @@ func main() {
server
.
Start
()
err
=
server
.
ConnectToPeer
(
"localhost:12345"
)
if
err
!=
nil
{
log
.
Println
(
"Error starting server"
,
err
)
server
.
Stop
()
return
}
// Wait for shutdown
server
.
WaitForShutdown
()
...
...
peer.go
View file @
7ade1778
...
...
@@ -28,7 +28,11 @@ type Peer struct {
// Flag for checking the peer's connectivity state
connected
int32
disconnect
int32
// Last known message send
lastSend
time
.
Time
// Indicated whether a verack has been send or not
// This flag is used by writeMessage to check if messages are allowed
// to be send or not. If no version is known all messages are ignored.
versionKnown
bool
}
...
...
server.go
View file @
7ade1778
...
...
@@ -8,13 +8,14 @@ import (
"log"
"net"
"time"
"sync/atomic"
)
func
eachPeer
(
peers
*
list
.
List
,
callback
func
(
*
Peer
))
{
func
eachPeer
(
peers
*
list
.
List
,
callback
func
(
*
Peer
,
*
list
.
Element
))
{
// Loop thru the peers and close them (if we had them)
for
e
:=
peers
.
Front
();
e
!=
nil
;
e
=
e
.
Next
()
{
if
peer
,
ok
:=
e
.
Value
.
(
*
Peer
);
ok
{
callback
(
peer
)
callback
(
peer
,
e
)
}
}
}
...
...
@@ -75,19 +76,54 @@ func (s *Server) ConnectToPeer(addr string) error {
}
func
(
s
*
Server
)
Broadcast
(
msgType
string
,
data
[]
byte
)
{
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
)
{
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
,
e
*
list
.
Element
)
{
p
.
QueueMessage
(
ethwire
.
NewMessage
(
msgType
,
0
,
data
))
})
}
const
(
processReapingTimeout
=
10
// TODO increase
)
func
(
s
*
Server
)
ReapDeadPeers
()
{
for
{
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
,
e
*
list
.
Element
)
{
if
atomic
.
LoadInt32
(
&
p
.
disconnect
)
==
1
{
log
.
Println
(
"Dead peer found .. reaping"
)
s
.
peers
.
Remove
(
e
)
}
})
time
.
Sleep
(
processReapingTimeout
*
time
.
Second
)
}
}
// Start the server
func
(
s
*
Server
)
Start
()
{
// For now this function just blocks the main thread
ln
,
err
:=
net
.
Listen
(
"tcp"
,
":12345"
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
// This is mainly for testing to create a "network"
if
Debug
{
log
.
Println
(
"Connection listening disabled. Acting as client"
)
err
=
s
.
ConnectToPeer
(
"localhost:12345"
)
if
err
!=
nil
{
log
.
Println
(
"Error starting server"
,
err
)
s
.
Stop
()
}
return
}
else
{
log
.
Fatal
(
err
)
}
}
// Start the reaping processes
go
s
.
ReapDeadPeers
()
go
func
()
{
for
{
conn
,
err
:=
ln
.
Accept
()
...
...
@@ -117,7 +153,7 @@ func (s *Server) Stop() {
// Close the database
defer
s
.
db
.
Close
()
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
)
{
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
,
e
*
list
.
Element
)
{
p
.
Stop
()
})
...
...
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