I guess it is nice to have a generic listen function because go1.11+ now has ListenConfig methods and it could be useful to setup some sockets options. For example:
func controlSetOpts(network, address string, c syscall.RawConn) (err error) {
// Taken from /usr/include/asm-generic/socket.h
const reuseport = 15
return c.Control(func(fd uintptr) {
// Try to set socket options ..
if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil {
log.Printf("cannot set SO_REUSEADDR on fd [%d]: %s", fd, err)
}
if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, reuseport, 1); err != nil {
log.Printf("cannot set SO_REUSEPORT on fd [%d]: %s", fd, err)
}
})
}
...
lc := &net.ListenConfig{Control: controlSetOpts}
if conn, err := lc.ListenPacket(context.Background(), "udp", "127.0.0.1:7788"); err != nil {
return err
} else {
err = syslog.ListenOn(conn)
}
Hey,
I guess it is nice to have a generic listen function because go1.11+ now has
ListenConfig
methods and it could be useful to setup some sockets options. For example:Any comments are welcome!