Return error if connection is closed

This commit is contained in:
Elara 2023-01-04 14:12:10 -08:00
parent 9944612ff5
commit 883d32209c
1 changed files with 11 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package muxconn
import ( import (
"context" "context"
"errors"
"io" "io"
"github.com/hashicorp/yamux" "github.com/hashicorp/yamux"
@ -9,6 +10,8 @@ import (
"storj.io/drpc/drpcconn" "storj.io/drpc/drpcconn"
) )
var ErrClosed = errors.New("connection closed")
var _ drpc.Conn = &Conn{} var _ drpc.Conn = &Conn{}
// Conn implements drpc.Conn using the yamux // Conn implements drpc.Conn using the yamux
@ -59,6 +62,10 @@ func (m *Conn) Closed() <-chan struct{} {
// Invoke issues the rpc on the transport serializing in, waits for a response, and deserializes it into out. // Invoke issues the rpc on the transport serializing in, waits for a response, and deserializes it into out.
func (m *Conn) Invoke(ctx context.Context, rpc string, enc drpc.Encoding, in, out drpc.Message) error { func (m *Conn) Invoke(ctx context.Context, rpc string, enc drpc.Encoding, in, out drpc.Message) error {
if m.isClosed {
return ErrClosed
}
conn, err := m.sess.Open() conn, err := m.sess.Open()
if err != nil { if err != nil {
return err return err
@ -71,6 +78,10 @@ func (m *Conn) Invoke(ctx context.Context, rpc string, enc drpc.Encoding, in, ou
// NewStream begins a streaming rpc on the connection. // NewStream begins a streaming rpc on the connection.
func (m *Conn) NewStream(ctx context.Context, rpc string, enc drpc.Encoding) (drpc.Stream, error) { func (m *Conn) NewStream(ctx context.Context, rpc string, enc drpc.Encoding) (drpc.Stream, error) {
if m.isClosed {
return nil, ErrClosed
}
conn, err := m.sess.Open() conn, err := m.sess.Open()
if err != nil { if err != nil {
return nil, err return nil, err