mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-12 15:03:45 +00:00
fix: handle utp packet in async
This commit is contained in:
parent
b12bed8bde
commit
0159c17f46
1 changed files with 10 additions and 6 deletions
|
|
@ -53,7 +53,7 @@ const (
|
||||||
|
|
||||||
portalFindnodesResultLimit = 32
|
portalFindnodesResultLimit = 32
|
||||||
|
|
||||||
defaultUTPConnectTimeout = 15 * time.Second
|
defaultUTPConnectTimeout = 60 * time.Second
|
||||||
|
|
||||||
defaultUTPWriteTimeout = 60 * time.Second
|
defaultUTPWriteTimeout = 60 * time.Second
|
||||||
|
|
||||||
|
|
@ -235,7 +235,6 @@ func (p *PortalProtocol) Start() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
p.DiscV5.RegisterTalkHandler(p.protocolId, p.handleTalkRequest)
|
p.DiscV5.RegisterTalkHandler(p.protocolId, p.handleTalkRequest)
|
||||||
p.DiscV5.RegisterTalkHandler(string(portalwire.UTPNetwork), p.handleUtpTalkRequest)
|
p.DiscV5.RegisterTalkHandler(string(portalwire.UTPNetwork), p.handleUtpTalkRequest)
|
||||||
|
|
||||||
|
|
@ -296,13 +295,19 @@ func (p *PortalProtocol) setupUDPListening() error {
|
||||||
var err error
|
var err error
|
||||||
p.packetRouter = utp.NewPacketRouter(
|
p.packetRouter = utp.NewPacketRouter(
|
||||||
func(buf []byte, addr *net.UDPAddr) (int, error) {
|
func(buf []byte, addr *net.UDPAddr) (int, error) {
|
||||||
p.Log.Info("will send to target data", "ip", addr.IP.To4().String(), "port", addr.Port, "bufLength", len(buf))
|
p.Log.Info("will send to target data", "network", string(portalwire.UTPNetwork), "ip", addr.IP.To4().String(), "port", addr.Port, "bufLength", len(buf))
|
||||||
|
|
||||||
p.cachedIdsLock.Lock()
|
p.cachedIdsLock.Lock()
|
||||||
defer p.cachedIdsLock.Unlock()
|
defer p.cachedIdsLock.Unlock()
|
||||||
if id, ok := p.cachedIds[addr.String()]; ok {
|
if id, ok := p.cachedIds[addr.String()]; ok {
|
||||||
_, err := p.DiscV5.TalkRequestToID(id, addr, string(portalwire.UTPNetwork), buf)
|
sendToId := id
|
||||||
return len(buf), err
|
go func(targetId enode.ID, addr *net.UDPAddr, utpNetwork string, buffer []byte) {
|
||||||
|
_, err := p.DiscV5.TalkRequestToID(targetId, addr, utpNetwork, buffer)
|
||||||
|
if err != nil {
|
||||||
|
p.Log.Error("send utp talk request failed", "err", err)
|
||||||
|
}
|
||||||
|
}(sendToId, addr, string(portalwire.UTPNetwork), buf)
|
||||||
|
return len(buf), nil
|
||||||
} else {
|
} else {
|
||||||
p.Log.Warn("not found target node info", "ip", addr.IP.To4().String(), "port", addr.Port, "bufLength", len(buf))
|
p.Log.Warn("not found target node info", "ip", addr.IP.To4().String(), "port", addr.Port, "bufLength", len(buf))
|
||||||
return 0, fmt.Errorf("not found target node id")
|
return 0, fmt.Errorf("not found target node id")
|
||||||
|
|
@ -795,7 +800,6 @@ func (p *PortalProtocol) handleUtpTalkRequest(id enode.ID, addr *net.UDPAddr, ms
|
||||||
if n := p.DiscV5.getNode(id); n != nil {
|
if n := p.DiscV5.getNode(id); n != nil {
|
||||||
p.table.addSeenNode(wrapNode(n))
|
p.table.addSeenNode(wrapNode(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
p.putCacheId(id, addr)
|
p.putCacheId(id, addr)
|
||||||
p.Log.Trace("receive utp data", "addr", addr, "msg-length", len(msg))
|
p.Log.Trace("receive utp data", "addr", addr, "msg-length", len(msg))
|
||||||
p.packetRouter.ReceiveMessage(msg, addr)
|
p.packetRouter.ReceiveMessage(msg, addr)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue