Skip to content

Commit

Permalink
f
Browse files Browse the repository at this point in the history
  • Loading branch information
wujunzhuo committed Aug 17, 2022
1 parent de0d434 commit 80f8536
Showing 1 changed file with 17 additions and 16 deletions.
33 changes: 17 additions & 16 deletions core/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,26 +131,26 @@ func (c *Client) connect(ctx context.Context, addr string) error {
// receiving frames
go func() {
closeConn, closeClient, err := c.handleFrame()
c.logger.Errorf("%shandleFrame: %v, %v, %v", ClientLogPrefix, closeConn, closeClient, err)
c.logger.Debugf("%shandleFrame: %v, %v, %T, %v", ClientLogPrefix, closeConn, closeClient, err, err)

stream.Close()
if closeConn {
c.conn.CloseWithError(yerr.ErrorCodeClientAbort.To(), err.Error())
c.mu.Lock()
defer c.mu.Unlock()

if c.state == ConnStateClosed {
return
}

c.mu.Lock()
c.state = ConnStateDisconnected
c.errc <- err

if c.state != ConnStateClosed {
c.errc <- err
stream.Close()
if closeConn {
c.conn.CloseWithError(yerr.ErrorCodeClientAbort.To(), err.Error())
}

if closeClient {
c.close()
} else if c.state != ConnStateClosed {
c.state = ConnStateDisconnected
}

c.mu.Unlock()
}()

return nil
Expand All @@ -165,6 +165,7 @@ func (c *Client) handleFrame() (bool, bool, error) {
if err == io.EOF {
return true, false, err
} else if strings.HasPrefix(err.Error(), "unknown frame type") {
c.logger.Warnf("%s%v", ClientLogPrefix, err)
continue
} else if e, ok := err.(*quic.IdleTimeoutError); ok {
return false, false, e
Expand Down Expand Up @@ -218,21 +219,21 @@ func (c *Client) Close() error {
c.mu.Lock()
defer c.mu.Unlock()

if c.state == ConnStateClosed {
return nil
}

c.conn.CloseWithError(yerr.ErrorCodeClientAbort.To(), "client ask to close")
return c.close()
}

func (c *Client) close() error {
if c.state == ConnStateClosed {
return nil
}
c.state = ConnStateClosed

c.logger.Printf("%s馃挃 close the connection, name:%s, id:%s, addr:%s", ClientLogPrefix, c.name, c.clientID, c.addr)

// close error channel so that close handler function will be called
close(c.errc)

c.state = ConnStateClosed
return nil
}

Expand Down

0 comments on commit 80f8536

Please sign in to comment.