Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dennis-tra committed Oct 17, 2024
1 parent 53aca12 commit 6d752bf
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions discv4/driver_crawler.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"math"
"net"
"net/netip"
"syscall"
"time"

ethcrypto "github.com/ethereum/go-ethereum/crypto"
Expand Down Expand Up @@ -244,13 +245,17 @@ func (d *CrawlDriver) NewWorker() (core.Worker[PeerInfo, core.CrawlResult[PeerIn
return nil, fmt.Errorf("listen on udp port: %w", err)
}

rcvbuf, sndbuf, err := getUDPBufferSize(conn)

log.WithFields(log.Fields{
"rcvbuf": rcvbuf,
"sndbuf": sndbuf,
}).Debugln("Listening on UDP port ", conn.LocalAddr().String(), " for Ethereum discovery")

discvxCfg := discover.Config{
PrivateKey: priv,
Unhandled: d.unhandledChan,
}

log.Debugln("Listening on UDP port ", conn.LocalAddr().String(), " for Ethereum discovery")

listener, err := discover.ListenV4(conn, ethNode, discvxCfg)
if err != nil {
return nil, fmt.Errorf("listen discv4: %w", err)
Expand Down Expand Up @@ -355,3 +360,27 @@ func (d *CrawlDriver) monitorUnhandledPackets() {
}
}()
}

// getUDPBufferSize reads the receive and send buffer sizes from the system
func getUDPBufferSize(conn *net.UDPConn) (rcvbuf int, sndbuf int, err error) {
rawConn, err := conn.SyscallConn()
if err != nil {
return 0, 0, err
}

var (
rcverr error
snderr error
)
err = rawConn.Control(func(fd uintptr) {
rcvbuf, rcverr = syscall.GetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
sndbuf, snderr = syscall.GetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
})
if rcverr != nil {
err = rcverr
} else if snderr != nil {
err = snderr
}

return
}

0 comments on commit 6d752bf

Please sign in to comment.