go-syslog icon indicating copy to clipboard operation
go-syslog copied to clipboard

server: add generic listen function

Open joy4eg opened this issue 6 years ago • 0 comments

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:

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)
}

Any comments are welcome!

joy4eg avatar Oct 17 '18 08:10 joy4eg