Merge pull request #159 from remicorniere/close_keepalive
Close keepalive when recv() ends in client.go
This commit is contained in:
commit
ef6de6000a
|
@ -379,11 +379,12 @@ func (c *Client) sendWithWriter(writer io.Writer, packet []byte) error {
|
||||||
|
|
||||||
// Loop: Receive data from server
|
// Loop: Receive data from server
|
||||||
func (c *Client) recv(keepaliveQuit chan<- struct{}) {
|
func (c *Client) recv(keepaliveQuit chan<- struct{}) {
|
||||||
|
defer close(keepaliveQuit)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
val, err := stanza.NextPacket(c.transport.GetDecoder())
|
val, err := stanza.NextPacket(c.transport.GetDecoder())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ErrorHandler(err)
|
c.ErrorHandler(err)
|
||||||
close(keepaliveQuit)
|
|
||||||
c.disconnected(c.Session.SMState)
|
c.disconnected(c.Session.SMState)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -392,7 +393,6 @@ func (c *Client) recv(keepaliveQuit chan<- struct{}) {
|
||||||
switch packet := val.(type) {
|
switch packet := val.(type) {
|
||||||
case stanza.StreamError:
|
case stanza.StreamError:
|
||||||
c.router.route(c, val)
|
c.router.route(c, val)
|
||||||
close(keepaliveQuit)
|
|
||||||
c.streamError(packet.Error.Local, packet.Text)
|
c.streamError(packet.Error.Local, packet.Text)
|
||||||
c.ErrorHandler(errors.New("stream error: " + packet.Error.Local))
|
c.ErrorHandler(errors.New("stream error: " + packet.Error.Local))
|
||||||
// We don't return here, because we want to wait for the stream close tag from the server, or timeout.
|
// We don't return here, because we want to wait for the stream close tag from the server, or timeout.
|
||||||
|
|
Loading…
Reference in a new issue