evio/vendor/github.com/kavu/go_reuseport
Josh Baker ac831bf3e5 reuseport option 2018-03-18 10:59:36 -07:00
..
LICENSE reuseport option 2018-03-18 10:59:36 -07:00
Makefile reuseport option 2018-03-18 10:59:36 -07:00
README.md reuseport option 2018-03-18 10:59:36 -07:00
reuseport.go reuseport option 2018-03-18 10:59:36 -07:00
reuseport_bsd.go reuseport option 2018-03-18 10:59:36 -07:00
reuseport_linux.go reuseport option 2018-03-18 10:59:36 -07:00
reuseport_windows.go reuseport option 2018-03-18 10:59:36 -07:00
tcp.go reuseport option 2018-03-18 10:59:36 -07:00
tcp_test.go reuseport option 2018-03-18 10:59:36 -07:00
test.bash reuseport option 2018-03-18 10:59:36 -07:00
udp.go reuseport option 2018-03-18 10:59:36 -07:00
udp_test.go reuseport option 2018-03-18 10:59:36 -07:00

README.md

GO_REUSEPORT

Build Status codecov GoDoc

GO_REUSEPORT is a little expirement to create a net.Listener that supports SO_REUSEPORT socket option.

For now, Darwin and Linux (from 3.9) systems are supported. I'll be pleased if you'll test other systems and tell me the results. documentation on godoc.org.

Example

package main

import (
  "fmt"
  "html"
  "net/http"
  "os"
  "runtime"
  "github.com/kavu/go_reuseport"
)

func main() {
  listener, err := reuseport.Listen("tcp", "localhost:8881")
  if err != nil {
    panic(err)
  }
  defer listener.Close()

  server := &http.Server{}
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Println(os.Getgid())
    fmt.Fprintf(w, "Hello, %q\n", html.EscapeString(r.URL.Path))
  })

  panic(server.Serve(listener))
}

Now you can run several instances of this tiny server without Address already in use errors.

Thanks

Inspired by Artur Siekielski post about SO_REUSEPORT.