|
@@ -260,7 +260,8 @@ func (conn *Conn) Read(b []byte) (int, error) {
|
|
|
defer conn.readMutex.Unlock()
|
|
defer conn.readMutex.Unlock()
|
|
|
|
|
|
|
|
n, err := conn.stream.Read(b)
|
|
n, err := conn.stream.Read(b)
|
|
|
- if isErrorExpectedOnClose(err) {
|
|
|
|
|
|
|
+ if isErrorIndicatingClosed(err) {
|
|
|
|
|
+ _ = conn.Close()
|
|
|
err = io.EOF
|
|
err = io.EOF
|
|
|
}
|
|
}
|
|
|
return n, err
|
|
return n, err
|
|
@@ -279,8 +280,11 @@ func (conn *Conn) Write(b []byte) (int, error) {
|
|
|
defer conn.writeMutex.Unlock()
|
|
defer conn.writeMutex.Unlock()
|
|
|
|
|
|
|
|
n, err := conn.stream.Write(b)
|
|
n, err := conn.stream.Write(b)
|
|
|
- if isErrorExpectedOnClose(err) && n == len(b) {
|
|
|
|
|
- err = nil
|
|
|
|
|
|
|
+ if isErrorIndicatingClosed(err) {
|
|
|
|
|
+ _ = conn.Close()
|
|
|
|
|
+ if n == len(b) {
|
|
|
|
|
+ err = nil
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return n, err
|
|
return n, err
|
|
|
}
|
|
}
|
|
@@ -345,7 +349,7 @@ func (conn *Conn) SetWriteDeadline(t time.Time) error {
|
|
|
return conn.stream.SetWriteDeadline(t)
|
|
return conn.stream.SetWriteDeadline(t)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func isErrorExpectedOnClose(err error) bool {
|
|
|
|
|
|
|
+func isErrorIndicatingClosed(err error) bool {
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
if quicErr, ok := err.(*qerr.QuicError); ok {
|
|
if quicErr, ok := err.(*qerr.QuicError); ok {
|
|
|
switch quicErr.ErrorCode {
|
|
switch quicErr.ErrorCode {
|