Don't potentially block forever in Close() (fixes #655)

This commit is contained in:
Jakob Borg 2014-09-10 08:48:15 +02:00
parent 1e51fca0b0
commit 5d85a24977
1 changed files with 8 additions and 0 deletions

View File

@ -5,6 +5,7 @@
package model
import (
"crypto/tls"
"errors"
"fmt"
"io"
@ -474,6 +475,13 @@ func (m *Model) Close(node protocol.NodeID, err error) {
conn, ok := m.rawConn[node]
if ok {
if conn, ok := conn.(*tls.Conn); ok {
// If the underlying connection is a *tls.Conn, Close() does more
// than it says on the tin. Specifically, it sends a TLS alert
// message, which might block forever if the connection is dead
// and we don't have a deadline site.
conn.SetWriteDeadline(time.Now().Add(250 * time.Millisecond))
}
conn.Close()
}
delete(m.protoConn, node)