Skip to content

Commit

Permalink
netutil: slog
Browse files Browse the repository at this point in the history
  • Loading branch information
Mizzick committed Jun 25, 2024
1 parent baf088f commit 695c829
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 10 deletions.
16 changes: 12 additions & 4 deletions internal/netutil/listenconfig.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package netutil

import "net"
import (
"log/slog"
"net"
)

// ListenConfig returns the default [net.ListenConfig] used by the plain-DNS
// servers in this module.
// servers in this module. l must not be nil.
//
// TODO(a.garipov): Add tests.
//
Expand All @@ -13,8 +16,13 @@ import "net"
// See https://github.com/AdguardTeam/AdGuardHome/issues/5872.
//
// TODO(a.garipov): DRY with AdGuard DNS when we can.
func ListenConfig() (lc *net.ListenConfig) {
func ListenConfig(l *slog.Logger) (lc *net.ListenConfig) {
return &net.ListenConfig{
Control: defaultListenControl,
Control: listenControl{logger: l}.defaultListenControl,
}
}

// listenControl is a wrapper struct with logger.
type listenControl struct {
logger *slog.Logger
}
5 changes: 2 additions & 3 deletions internal/netutil/listenconfig_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ import (
"syscall"

"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log"
"golang.org/x/sys/unix"
)

// defaultListenControl is used as a [net.ListenConfig.Control] function to set
// the SO_REUSEADDR and SO_REUSEPORT socket options on all sockets used by the
// DNS servers in this module.
func defaultListenControl(_, _ string, c syscall.RawConn) (err error) {
func (lc listenControl) defaultListenControl(_, _ string, c syscall.RawConn) (err error) {
var opErr error
err = c.Control(func(fd uintptr) {
opErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1)
Expand All @@ -29,7 +28,7 @@ func defaultListenControl(_, _ string, c syscall.RawConn) (err error) {
if errors.Is(opErr, unix.ENOPROTOOPT) {
// Some Linux OSs do not seem to support SO_REUSEPORT, including
// some varieties of OpenWrt. Issue a warning.
log.Info("warning: SO_REUSEPORT not supported: %s", opErr)
lc.logger.Warn("SO_REUSEPORT not supported: %s", opErr)
opErr = nil
} else {
opErr = fmt.Errorf("setting SO_REUSEPORT: %w", opErr)
Expand Down
4 changes: 3 additions & 1 deletion internal/netutil/listenconfig_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ import "syscall"

// defaultListenControl is nil on Windows, because it doesn't support
// SO_REUSEPORT.
var defaultListenControl func(_, _ string, _ syscall.RawConn) (_ error)
func (lc listenControl) defaultListenControl(_, _ string, _ syscall.RawConn) (_ error) {
return nil
}
2 changes: 1 addition & 1 deletion proxy/server_tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func (p *Proxy) createTCPListeners(ctx context.Context) (err error) {
for _, a := range p.TCPListenAddr {
p.logger.Info("creating tcp server socket", "addr", a)

lsnr, lErr := proxynetutil.ListenConfig().Listen(ctx, "tcp", a.String())
lsnr, lErr := proxynetutil.ListenConfig(p.logger).Listen(ctx, "tcp", a.String())
if lErr != nil {
return fmt.Errorf("listening to tcp socket: %w", lErr)
}
Expand Down
2 changes: 1 addition & 1 deletion proxy/server_udp.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func (p *Proxy) createUDPListeners(ctx context.Context) (err error) {
func (p *Proxy) udpCreate(ctx context.Context, udpAddr *net.UDPAddr) (*net.UDPConn, error) {
p.logger.InfoContext(ctx, "creating udp server socket", "addr", udpAddr)

packetConn, err := proxynetutil.ListenConfig().ListenPacket(ctx, "udp", udpAddr.String())
packetConn, err := proxynetutil.ListenConfig(p.logger).ListenPacket(ctx, "udp", udpAddr.String())
if err != nil {
return nil, fmt.Errorf("listening to udp socket: %w", err)
}
Expand Down

0 comments on commit 695c829

Please sign in to comment.