Sockets have something called SO_REUSEADDR. BSD libraries, Java and other
support this. I would think Go supports this in some form.
On Tuesday, November 28, 2017 at 9:53:48 PM UTC-7, Albert Tedja wrote:
>
> net/http's Shutdown() does not free up the port upon return, or rather it
> seems a bit undefined how long it takes for the port to be reusable again.
>
> server := &http.Server{
> Addr: fmt.Sprintf(":9000"),
> }
> go func() {
> fmt.Println("hosting...")
> err := server.ListenAndServe()
> }()
> time.Sleep(1 * time.Second)
>
> fmt.Println("closing")
> err := server.Shutdown(nil)
> fmt.Println("shutdown error", err)
>
> fmt.Println("hosting again...")
> err = server.ListenAndServe()
> fmt.Println("host again err", err)
>
>
>
> The code above, for example, sometimes successfully hosting the http
> server twice, but sometimes, the second one fails with "address already in
> use" error
>
> $ go run main.go
> hosting...
> closing
> shutdown error <nil>
> hosting again...
> // This is okay
>
> $ go run main.go
> hosting...
> closing
> shutdown error <nil>
> hosting again...
> host again err listen tcp :9000: bind: address already in use
>
> My question is, is this a bug, or an expected undetermined behavior? If
> it's the latter, how can I safely make sure that Shutdown() completely
> frees up the port used?
>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.