diff --git a/pkg/common/startrpc/socket_posix.go b/pkg/common/startrpc/socket_posix.go new file mode 100644 index 000000000..402abe888 --- /dev/null +++ b/pkg/common/startrpc/socket_posix.go @@ -0,0 +1,26 @@ +//go:build linux || darwin + +package startrpc + +import ( + "context" + "github.com/openimsdk/tools/log" + "net" + "syscall" +) + +func createListener() net.ListenConfig { + lc := net.ListenConfig{ + Control: func(network, address string, conn syscall.RawConn) error { + return conn.Control(func(fd uintptr) { + err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) + if err != nil { + log.ZError(context.Background(), "Failed to set socket flag to SO_REUSEADDR", err) + return + } + }) + }, + } + + return lc +} diff --git a/pkg/common/startrpc/socket_windows.go b/pkg/common/startrpc/socket_windows.go new file mode 100644 index 000000000..bf4da24de --- /dev/null +++ b/pkg/common/startrpc/socket_windows.go @@ -0,0 +1,26 @@ +//go:build windows + +package startrpc + +import ( + "context" + "github.com/openimsdk/tools/log" + "net" + "syscall" +) + +func createListener() net.ListenConfig { + lc := net.ListenConfig{ + Control: func(network, address string, conn syscall.RawConn) error { + return conn.Control(func(fd uintptr) { + err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) + if err != nil { + log.ZError(context.Background(), "Failed to set socket flag to SO_REUSEADDR", err) + return + } + }) + }, + } + + return lc +} diff --git a/pkg/common/startrpc/start.go b/pkg/common/startrpc/start.go index 9c7280da1..08bc1ddac 100644 --- a/pkg/common/startrpc/start.go +++ b/pkg/common/startrpc/start.go @@ -55,13 +55,7 @@ func Start[T any](ctx context.Context, discovery *config.Discovery, prometheusCo "prometheusPorts", prometheusConfig.Ports) rpcTcpAddr := net.JoinHostPort(network.GetListenIP(listenIP), strconv.Itoa(rpcPort)) - lc := net.ListenConfig{ - Control: func(network, address string, conn syscall.RawConn) error { - return conn.Control(func(fd uintptr) { - _ = syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) - }) - }, - } + lc := createListener() listener, err := lc.Listen( ctx, "tcp",