|
|
@@ -0,0 +1,41 @@
|
|
|
+//+build linux
|
|
|
+
|
|
|
+package nnet
|
|
|
+
|
|
|
+import (
|
|
|
+ "github.com/valyala/tcplisten"
|
|
|
+ "net"
|
|
|
+ "syscall"
|
|
|
+)
|
|
|
+
|
|
|
+var cfg = tcplisten.Config{
|
|
|
+ ReusePort: true, DeferAccept: true, FastOpen: true, Backlog: 0,
|
|
|
+}
|
|
|
+
|
|
|
+func Listen(addr string) (net.Listener, error) {
|
|
|
+ err := setMaxConn()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return cfg.NewListener("tcp4", addr)
|
|
|
+}
|
|
|
+
|
|
|
+func setMaxConn() error {
|
|
|
+ var RLimit syscall.Rlimit
|
|
|
+ err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ RLimit.Cur = 800000
|
|
|
+ RLimit.Max = 800000
|
|
|
+ err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &RLimit)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|