Skip to content

Instantly share code, notes, and snippets.

@Stebalien
Created February 12, 2019 20:21
Show Gist options
  • Save Stebalien/a62aa7c7ff2948318484ab8fa3135135 to your computer and use it in GitHub Desktop.
Save Stebalien/a62aa7c7ff2948318484ab8fa3135135 to your computer and use it in GitHub Desktop.
package main
import (
"net"
"sync"
"syscall"
)
func setFdLimit(limit uint64) {
var rLimit syscall.Rlimit
err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
if err != nil {
panic(err)
}
rLimit.Max = limit
rLimit.Cur = limit
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
if err != nil {
panic(err)
}
}
func main() {
setFdLimit(16384 * 2)
listener, err := net.Listen("tcp4", "127.0.0.1:0")
if err != nil {
panic(err)
}
go func() {
var accepted []net.Conn
for {
c, err := listener.Accept()
if err != nil {
break
}
accepted = append(accepted, c)
}
for _, c := range accepted {
c.Close()
}
}()
var conns [16000]net.Conn
for i := range conns {
conns[i], err = net.Dial(listener.Addr().Network(), listener.Addr().String())
if err != nil {
panic(err)
}
}
var ready, done sync.WaitGroup
ready.Add(len(conns))
done.Add(len(conns))
for _, f := range conns {
go func(f net.Conn) {
defer done.Done()
ready.Done()
ready.Wait()
f.Close()
}(f)
}
done.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment