Browse Source

Unix sockets support

Manu Mtz-Almeida 10 years ago
parent
commit
cd6e95f0e4
1 changed files with 19 additions and 2 deletions
  1. 19 2
      gin.go

+ 19 - 2
gin.go

@@ -6,7 +6,9 @@ package gin
 
 import (
 	"html/template"
+	"net"
 	"net/http"
+	"os"
 	"sync"
 
 	"github.com/gin-gonic/gin/binding"
@@ -159,7 +161,7 @@ func (engine *Engine) handle(method, path string, handlers HandlersChain) {
 
 func (engine *Engine) Run(addr string) (err error) {
 	debugPrint("Listening and serving HTTP on %s\n", addr)
-	defer debugPrintError(err)
+	defer func() { debugPrintError(err) }()
 
 	err = http.ListenAndServe(addr, engine)
 	return
@@ -167,12 +169,27 @@ func (engine *Engine) Run(addr string) (err error) {
 
 func (engine *Engine) RunTLS(addr string, cert string, key string) (err error) {
 	debugPrint("Listening and serving HTTPS on %s\n", addr)
-	defer debugPrintError(err)
+	defer func() { debugPrintError(err) }()
 
 	err = http.ListenAndServe(addr, engine)
 	return
 }
 
+func (engine *Engine) RunUnix(file string) (err error) {
+	debugPrint("Listening and serving HTTP on unix:/%s", file)
+	defer func() { debugPrintError(err) }()
+
+	os.Remove(file)
+	listener, err2 := net.Listen("unix", file)
+	err = err2
+	if err != nil {
+		return
+	}
+	defer listener.Close()
+	err = http.Serve(listener, engine)
+	return
+}
+
 // ServeHTTP makes the router implement the http.Handler interface.
 func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 	c := engine.getcontext(w, req)