Skip to content

Commit 3afb82b

Browse files
committed
Fix error handling with server shutdown
Signed-off-by: Michael Crosby <[email protected]>
1 parent f3eb35b commit 3afb82b

2 files changed

Lines changed: 14 additions & 15 deletions

File tree

client.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (r *receiver) run(ctx context.Context, c *channel) {
202202
if !ok {
203203
// treat all errors that are not an rpc status as terminal.
204204
// all others poison the connection.
205-
r.err = err
205+
r.err = filterCloseErr(err)
206206
return
207207
}
208208
}
@@ -328,22 +328,21 @@ func (c *Client) recv(resp *Response, msg *message) error {
328328
//
329329
// This purposely ignores errors with a wrapped cause.
330330
func filterCloseErr(err error) error {
331-
if err == nil {
331+
switch {
332+
case err == nil:
332333
return nil
333-
}
334-
335-
if err == io.EOF {
334+
case err == io.EOF:
336335
return ErrClosed
337-
}
338-
339-
if strings.Contains(err.Error(), "use of closed network connection") {
336+
case errors.Cause(err) == io.EOF:
340337
return ErrClosed
341-
}
342-
343-
// if we have an epipe on a write, we cast to errclosed
344-
if oerr, ok := err.(*net.OpError); ok && oerr.Op == "write" {
345-
if serr, ok := oerr.Err.(*os.SyscallError); ok && serr.Err == syscall.EPIPE {
346-
return ErrClosed
338+
case strings.Contains(err.Error(), "use of closed network connection"):
339+
return ErrClosed
340+
default:
341+
// if we have an epipe on a write, we cast to errclosed
342+
if oerr, ok := err.(*net.OpError); ok && oerr.Op == "write" {
343+
if serr, ok := oerr.Err.(*os.SyscallError); ok && serr.Err == syscall.EPIPE {
344+
return ErrClosed
345+
}
347346
}
348347
}
349348

server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ func TestClientEOF(t *testing.T) {
351351
}
352352

353353
// shutdown the server so the client stops receiving stuff.
354-
if err := server.Shutdown(ctx); err != nil {
354+
if err := server.Close(); err != nil {
355355
t.Fatal(err)
356356
}
357357
if err := <-errs; err != ErrServerClosed {

0 commit comments

Comments
 (0)