listener_others.go 718 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //+build linux
  2. package nnet
  3. import (
  4. "github.com/valyala/tcplisten"
  5. "net"
  6. "syscall"
  7. )
  8. var cfg = tcplisten.Config{
  9. ReusePort: true, DeferAccept: true, FastOpen: true, Backlog: 0,
  10. }
  11. func Listen(addr string) (net.Listener, error) {
  12. err := setMaxConn()
  13. if err != nil {
  14. return nil, err
  15. }
  16. return cfg.NewListener("tcp4", addr)
  17. }
  18. func setMaxConn() error {
  19. var RLimit syscall.Rlimit
  20. err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
  21. if err != nil {
  22. return err
  23. }
  24. RLimit.Cur = 800000
  25. RLimit.Max = 800000
  26. err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &RLimit)
  27. if err != nil {
  28. return err
  29. }
  30. err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
  31. if err != nil {
  32. return err
  33. }
  34. return nil
  35. }