@@ -31,7 +31,18 @@ func (s *server) Addr() net.Addr {
3131 return nil
3232}
3333
34- func (s * server ) Handle (conn net.Conn ) (stat.Connection , error ) {
34+ func (s * server ) Handle (conn net.Conn ) {
35+ conn , err := s .upgrade (conn )
36+ if err != nil {
37+ common .CloseIfExists (conn )
38+ errors .LogInfoInner (context .Background (), err , "failed to handle request" )
39+ return
40+ }
41+ s .addConn (conn )
42+ }
43+
44+ // upgrade execute a fake websocket upgrade process and return the available connection
45+ func (s * server ) upgrade (conn net.Conn ) (stat.Connection , error ) {
3546 connReader := bufio .NewReader (conn )
3647 req , err := http .ReadRequest (connReader )
3748 if err != nil {
@@ -52,7 +63,6 @@ func (s *server) Handle(conn net.Conn) (stat.Connection, error) {
5263 connection := strings .ToLower (req .Header .Get ("Connection" ))
5364 upgrade := strings .ToLower (req .Header .Get ("Upgrade" ))
5465 if connection != "upgrade" || upgrade != "websocket" {
55- _ = conn .Close ()
5666 return nil , errors .New ("unrecognized request" )
5767 }
5868 resp := & http.Response {
@@ -67,7 +77,6 @@ func (s *server) Handle(conn net.Conn) (stat.Connection, error) {
6777 resp .Header .Set ("Upgrade" , "websocket" )
6878 err = resp .Write (conn )
6979 if err != nil {
70- _ = conn .Close ()
7180 return nil , err
7281 }
7382
@@ -99,14 +108,7 @@ func (s *server) keepAccepting() {
99108 if err != nil {
100109 return
101110 }
102- go func () {
103- handledConn , err := s .Handle (conn )
104- if err != nil {
105- errors .LogInfoInner (context .Background (), err , "failed to handle request" )
106- return
107- }
108- s .addConn (handledConn )
109- }()
111+ go s .Handle (conn )
110112 }
111113}
112114
0 commit comments