]> 127.0.0.1 Git - part/.git/commitdiff
websocket fix v0.5.26
authorqydysky <qydysky@foxmail.com>
Mon, 14 Jun 2021 19:47:28 +0000 (03:47 +0800)
committerqydysky <qydysky@foxmail.com>
Mon, 14 Jun 2021 19:47:28 +0000 (03:47 +0800)
websocket/Client.go

index 9f92a9c4343fcd58cdeec94004e7b806b7505949..f06344eba287107518a2e2beb2b17ad7d873e07d 100644 (file)
@@ -1,6 +1,7 @@
 package part
 
 import (
+       "io"
        "time"
        "errors"
        "net/http"
@@ -73,28 +74,47 @@ func (i *Client) Handle() (o *Client) {
                return
        }
 
-       go func(){
-               defer func(){
-                       o.signal.Done()
-                       close(o.RecvChan)
-               }()
+       tmp_Header := make(http.Header)
+       for k,v := range o.Header {
+               tmp_Header.Set(k, v)
+       }
 
-               tmp_Header := make(http.Header)
-               for k,v := range o.Header {
-                       tmp_Header.Set(k, v)
+       dial := websocket.DefaultDialer
+       if o.Proxy != "" {
+               proxy := func(_ *http.Request) (*url.URL, error) {
+                       return url.Parse(o.Proxy)
                }
+               dial.Proxy = proxy
+       }
+       c, response, err := dial.Dial(o.Url, tmp_Header)
 
-               dial := websocket.DefaultDialer
-               if o.Proxy != "" {
-                       proxy := func(_ *http.Request) (*url.URL, error) {
-                               return url.Parse(o.Proxy)
+       if err != nil {
+               o.signal.Done()
+               e := err.Error()
+               if response != nil {
+                       if response.Status != "" {
+                               e += ` `+response.Status
+                       }
+                       if response.Body != nil {
+                               body, err := io.ReadAll(response.Body)
+                               if err != nil {
+                                       o.err = err
+                                       return
+                               }
+                               response.Body.Close()
+                               e += ` `+string(body)
                        }
-                       dial.Proxy = proxy
                }
-               c, _, err := dial.Dial(o.Url, tmp_Header)
+               o.err = errors.New(e)
+               return
+       }
 
-               if err != nil {return}
-               defer c.Close()
+       go func(){
+               defer func(){
+                       o.signal.Done()
+                       close(o.RecvChan)
+                       c.Close()
+               }()
 
                done := s.Init()
                defer done.Done()