slackhq/nebula · error

failed to open udp socket: %w

Error message

failed to open udp socket: %w

What it means

Wrapping error in the Darwin UDP listener: uc.SyscallConn() failed on an already-listening net.UDPConn, so the raw fd needed for sendmmsg/recvmmsg-style control could not be obtained. Rare plumbing failure between netpoll and syscall; cause preserved with %w.

Source

Thrown at udp/udp_darwin.go:42

	sysFd uintptr
	l     *slog.Logger
}

var _ Conn = &StdConn{}

func NewListener(l *slog.Logger, s Settings) (Conn, error) {
	lc := NewListenConfig(s.Multi)
	pc, err := lc.ListenPacket(context.TODO(), "udp", s.Listen.String())
	if err != nil {
		return nil, err
	}

	if uc, ok := pc.(*net.UDPConn); ok {
		c := &StdConn{UDPConn: uc, l: l}

		rc, err := uc.SyscallConn()
		if err != nil {
			return nil, fmt.Errorf("failed to open udp socket: %w", err)
		}

		err = rc.Control(func(fd uintptr) {
			c.sysFd = fd
		})
		if err != nil {
			return nil, fmt.Errorf("failed to get udp fd: %w", err)
		}

		la, err := c.LocalAddr()
		if err != nil {
			return nil, err
		}
		c.isV4 = la.Addr().Is4()

		return c, nil
	}

View on GitHub (pinned to dd8f660c0a)

Solutions

  1. Retry creating the listener
  2. Report with Go version and macOS version if persistent — likely a runtime/netpoll issue
  3. Close and reopen the socket if fd exhaustion is suspected
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at udp/udp_darwin.go:42 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of slackhq/nebula@dd8f660c0a (2026-09-03). Data as JSON: /api/errors/d1e28ce03181b10f. Report an issue: GitHub.