Skip to content

Brings SO_REUSEPORT into your Go server

License

Notifications You must be signed in to change notification settings

kavu/go_reuseport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fd621af · Apr 28, 2021

History

64 Commits
Jan 9, 2017
Apr 28, 2021
Mar 16, 2014
Apr 28, 2021
Jan 14, 2017
Aug 25, 2018
Jan 14, 2017
Jan 14, 2017
Jan 14, 2017
Mar 29, 2017
Oct 2, 2019
Jan 14, 2017
Apr 28, 2021
Oct 2, 2019
Jan 14, 2017

Repository files navigation

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.