aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-25 20:16:54 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-25 20:16:54 +0100
commita2145bef44b3033de2d5beea96034715ffa931bc (patch)
tree96071e768b5773556e4714358aab91f6b89c3d81
parent57c53df2246eb79d77245e8f2cc9efe03f997c14 (diff)
Cut off early
-rw-r--r--ws.go28
1 files changed, 15 insertions, 13 deletions
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
}