From a2145bef44b3033de2d5beea96034715ffa931bc Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 25 Mar 2016 20:16:54 +0100 Subject: Cut off early --- ws.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'ws.go') diff --git a/ws.go b/ws.go index a8f85b6..ef6a76e 100644 --- a/ws.go +++ b/ws.go @@ -14,25 +14,27 @@ type WebSocketProxy struct { } func (p *WebSocketProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { - p.Director(r) - - d, err := net.Dial("tcp", r.URL.Host) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - defer d.Close() hj, ok := w.(http.Hijacker) if !ok { http.Error(w, "Not a hijacker", http.StatusInternalServerError) return } - nc, _, err := hj.Hijack() + + conn, _, err := hj.Hijack() if err != nil { - log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer conn.Close() + + p.Director(r) + + d, err := net.Dial("tcp", r.URL.Host) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) return } - defer nc.Close() + defer d.Close() err = r.Write(d) if err != nil { @@ -45,8 +47,8 @@ func (p *WebSocketProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { _, err := io.Copy(dst, src) errc <- err } - go cp(d, nc) - go cp(nc, d) + go cp(d, conn) + go cp(conn, d) <-errc } -- cgit v1.2.3