URI: 
       Better handling of when the specified port is already in use - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 296d218e6704e73b3261bca6f5f72b3569cf899b
   DIR parent b520f8852d566f778ad13e2201adcf71c7d42d34
  HTML Author: spf13 <steve.francia@gmail.com>
       Date:   Thu, 15 May 2014 15:07:46 -0400
       
       Better handling of when the specified port is already in use
       
       Diffstat:
         M commands/server.go                  |      14 ++++++++++++++
         M helpers/general.go                  |      15 +++++++++++++++
       
       2 files changed, 29 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/commands/server.go b/commands/server.go
       @@ -15,6 +15,7 @@ package commands
        
        import (
                "fmt"
       +        "net"
                "net/http"
                "os"
                "strconv"
       @@ -56,6 +57,19 @@ func server(cmd *cobra.Command, args []string) {
                        BaseUrl = "http://" + BaseUrl
                }
        
       +        l, err := net.Listen("tcp", ":"+strconv.Itoa(serverPort))
       +        if err == nil {
       +                l.Close()
       +        } else {
       +                jww.ERROR.Println("port", serverPort, "already in use, attempting to use an available port")
       +                sp, err := helpers.FindAvailablePort()
       +                if err != nil {
       +                        jww.ERROR.Println("Unable to find alternative port to use")
       +                        jww.ERROR.Fatalln(err)
       +                }
       +                serverPort = sp.Port
       +        }
       +
                if serverAppend {
                        viper.Set("BaseUrl", strings.TrimSuffix(BaseUrl, "/")+":"+strconv.Itoa(serverPort))
                } else {
   DIR diff --git a/helpers/general.go b/helpers/general.go
       @@ -15,6 +15,8 @@ package helpers
        
        import (
                "bytes"
       +        "fmt"
       +        "net"
                "strings"
        )
        
       @@ -49,3 +51,16 @@ func StripHTML(s string) string {
                }
                return output
        }
       +
       +func FindAvailablePort() (*net.TCPAddr, error) {
       +        l, err := net.Listen("tcp", ":0")
       +        if err == nil {
       +                defer l.Close()
       +                addr := l.Addr()
       +                if a, ok := addr.(*net.TCPAddr); ok {
       +                        return a, nil
       +                }
       +                return nil, fmt.Errorf("Unable to obtain a valid tcp port. %v", addr)
       +        }
       +        return nil, err
       +}