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
ba2884f3
Commit
ba2884f3
authored
Nov 21, 2016
by
Felix Lange
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
p2p/discover, p2p/discv5: use netutil.IsTemporaryError
parent
1d80155d
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
2 additions
and
248 deletions
+2
-248
udp.go
p2p/discover/udp.go
+1
-8
udp_notwindows.go
p2p/discover/udp_notwindows.go
+0
-26
udp_test.go
p2p/discover/udp_test.go
+0
-50
udp_windows.go
p2p/discover/udp_windows.go
+0
-40
udp.go
p2p/discv5/udp.go
+1
-8
udp_notwindows.go
p2p/discv5/udp_notwindows.go
+0
-26
udp_test.go
p2p/discv5/udp_test.go
+0
-50
udp_windows.go
p2p/discv5/udp_windows.go
+0
-40
No files found.
p2p/discover/udp.go
View file @
ba2884f3
...
...
@@ -479,13 +479,6 @@ func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) ([]byte,
return
packet
,
nil
}
func
isTemporaryError
(
err
error
)
bool
{
tempErr
,
ok
:=
err
.
(
interface
{
Temporary
()
bool
})
return
ok
&&
tempErr
.
Temporary
()
||
isPacketTooBig
(
err
)
}
// readLoop runs in its own goroutine. it handles incoming UDP packets.
func
(
t
*
udp
)
readLoop
()
{
defer
t
.
conn
.
Close
()
...
...
@@ -495,7 +488,7 @@ func (t *udp) readLoop() {
buf
:=
make
([]
byte
,
1280
)
for
{
nbytes
,
from
,
err
:=
t
.
conn
.
ReadFromUDP
(
buf
)
if
i
sTemporaryError
(
err
)
{
if
netutil
.
I
sTemporaryError
(
err
)
{
// Ignore temporary read errors.
glog
.
V
(
logger
.
Debug
)
.
Infof
(
"Temporary read error: %v"
,
err
)
continue
...
...
p2p/discover/udp_notwindows.go
deleted
100644 → 0
View file @
1d80155d
// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
//+build !windows
package
discover
// reports whether err indicates that a UDP packet didn't
// fit the receive buffer. There is no such error on
// non-Windows platforms.
func
isPacketTooBig
(
err
error
)
bool
{
return
false
}
p2p/discover/udp_test.go
View file @
ba2884f3
...
...
@@ -43,56 +43,6 @@ func init() {
spew
.
Config
.
DisableMethods
=
true
}
// This test checks that isPacketTooBig correctly identifies
// errors that result from receiving a UDP packet larger
// than the supplied receive buffer.
func
TestIsPacketTooBig
(
t
*
testing
.
T
)
{
listener
,
err
:=
net
.
ListenPacket
(
"udp"
,
"127.0.0.1:0"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
listener
.
Close
()
sender
,
err
:=
net
.
Dial
(
"udp"
,
listener
.
LocalAddr
()
.
String
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
sender
.
Close
()
sendN
:=
1800
recvN
:=
300
for
i
:=
0
;
i
<
20
;
i
++
{
go
func
()
{
buf
:=
make
([]
byte
,
sendN
)
for
i
:=
range
buf
{
buf
[
i
]
=
byte
(
i
)
}
sender
.
Write
(
buf
)
}()
buf
:=
make
([]
byte
,
recvN
)
listener
.
SetDeadline
(
time
.
Now
()
.
Add
(
1
*
time
.
Second
))
n
,
_
,
err
:=
listener
.
ReadFrom
(
buf
)
if
err
!=
nil
{
if
nerr
,
ok
:=
err
.
(
net
.
Error
);
ok
&&
nerr
.
Timeout
()
{
continue
}
if
!
isPacketTooBig
(
err
)
{
t
.
Fatal
(
"unexpected read error:"
,
spew
.
Sdump
(
err
))
}
continue
}
if
n
!=
recvN
{
t
.
Fatalf
(
"short read: %d, want %d"
,
n
,
recvN
)
}
for
i
:=
range
buf
{
if
buf
[
i
]
!=
byte
(
i
)
{
t
.
Fatalf
(
"error in pattern"
)
break
}
}
}
}
// shared test variables
var
(
futureExp
=
uint64
(
time
.
Now
()
.
Add
(
10
*
time
.
Hour
)
.
Unix
())
...
...
p2p/discover/udp_windows.go
deleted
100644 → 0
View file @
1d80155d
// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
//+build windows
package
discover
import
(
"net"
"os"
"syscall"
)
const
_WSAEMSGSIZE
=
syscall
.
Errno
(
10040
)
// reports whether err indicates that a UDP packet didn't
// fit the receive buffer. On Windows, WSARecvFrom returns
// code WSAEMSGSIZE and no data if this happens.
func
isPacketTooBig
(
err
error
)
bool
{
if
opErr
,
ok
:=
err
.
(
*
net
.
OpError
);
ok
{
if
scErr
,
ok
:=
opErr
.
Err
.
(
*
os
.
SyscallError
);
ok
{
return
scErr
.
Err
==
_WSAEMSGSIZE
}
return
opErr
.
Err
==
_WSAEMSGSIZE
}
return
false
}
p2p/discv5/udp.go
View file @
ba2884f3
...
...
@@ -385,7 +385,7 @@ func (t *udp) readLoop() {
buf
:=
make
([]
byte
,
1280
)
for
{
nbytes
,
from
,
err
:=
t
.
conn
.
ReadFromUDP
(
buf
)
if
i
sTemporaryError
(
err
)
{
if
netutil
.
I
sTemporaryError
(
err
)
{
// Ignore temporary read errors.
glog
.
V
(
logger
.
Debug
)
.
Infof
(
"Temporary read error: %v"
,
err
)
continue
...
...
@@ -398,13 +398,6 @@ func (t *udp) readLoop() {
}
}
func
isTemporaryError
(
err
error
)
bool
{
tempErr
,
ok
:=
err
.
(
interface
{
Temporary
()
bool
})
return
ok
&&
tempErr
.
Temporary
()
||
isPacketTooBig
(
err
)
}
func
(
t
*
udp
)
handlePacket
(
from
*
net
.
UDPAddr
,
buf
[]
byte
)
error
{
pkt
:=
ingressPacket
{
remoteAddr
:
from
}
if
err
:=
decodePacket
(
buf
,
&
pkt
);
err
!=
nil
{
...
...
p2p/discv5/udp_notwindows.go
deleted
100644 → 0
View file @
1d80155d
// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
//+build !windows
package
discv5
// reports whether err indicates that a UDP packet didn't
// fit the receive buffer. There is no such error on
// non-Windows platforms.
func
isPacketTooBig
(
err
error
)
bool
{
return
false
}
p2p/discv5/udp_test.go
View file @
ba2884f3
...
...
@@ -36,56 +36,6 @@ func init() {
spew
.
Config
.
DisableMethods
=
true
}
// This test checks that isPacketTooBig correctly identifies
// errors that result from receiving a UDP packet larger
// than the supplied receive buffer.
func
TestIsPacketTooBig
(
t
*
testing
.
T
)
{
listener
,
err
:=
net
.
ListenPacket
(
"udp"
,
"127.0.0.1:0"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
listener
.
Close
()
sender
,
err
:=
net
.
Dial
(
"udp"
,
listener
.
LocalAddr
()
.
String
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
sender
.
Close
()
sendN
:=
1800
recvN
:=
300
for
i
:=
0
;
i
<
20
;
i
++
{
go
func
()
{
buf
:=
make
([]
byte
,
sendN
)
for
i
:=
range
buf
{
buf
[
i
]
=
byte
(
i
)
}
sender
.
Write
(
buf
)
}()
buf
:=
make
([]
byte
,
recvN
)
listener
.
SetDeadline
(
time
.
Now
()
.
Add
(
1
*
time
.
Second
))
n
,
_
,
err
:=
listener
.
ReadFrom
(
buf
)
if
err
!=
nil
{
if
nerr
,
ok
:=
err
.
(
net
.
Error
);
ok
&&
nerr
.
Timeout
()
{
continue
}
if
!
isPacketTooBig
(
err
)
{
t
.
Fatal
(
"unexpected read error:"
,
spew
.
Sdump
(
err
))
}
continue
}
if
n
!=
recvN
{
t
.
Fatalf
(
"short read: %d, want %d"
,
n
,
recvN
)
}
for
i
:=
range
buf
{
if
buf
[
i
]
!=
byte
(
i
)
{
t
.
Fatalf
(
"error in pattern"
)
break
}
}
}
}
// shared test variables
var
(
futureExp
=
uint64
(
time
.
Now
()
.
Add
(
10
*
time
.
Hour
)
.
Unix
())
...
...
p2p/discv5/udp_windows.go
deleted
100644 → 0
View file @
1d80155d
// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
//+build windows
package
discv5
import
(
"net"
"os"
"syscall"
)
const
_WSAEMSGSIZE
=
syscall
.
Errno
(
10040
)
// reports whether err indicates that a UDP packet didn't
// fit the receive buffer. On Windows, WSARecvFrom returns
// code WSAEMSGSIZE and no data if this happens.
func
isPacketTooBig
(
err
error
)
bool
{
if
opErr
,
ok
:=
err
.
(
*
net
.
OpError
);
ok
{
if
scErr
,
ok
:=
opErr
.
Err
.
(
*
os
.
SyscallError
);
ok
{
return
scErr
.
Err
==
_WSAEMSGSIZE
}
return
opErr
.
Err
==
_WSAEMSGSIZE
}
return
false
}
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