github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/helper/eof.go (about)

     1  // These functions are coming from consul/lib/eof.go
     2  package helper
     3  
     4  import (
     5  	"errors"
     6  	"fmt"
     7  	"io"
     8  	"net/rpc"
     9  	"strings"
    10  
    11  	"github.com/hashicorp/yamux"
    12  )
    13  
    14  var yamuxStreamClosed = yamux.ErrStreamClosed.Error()
    15  var yamuxSessionShutdown = yamux.ErrSessionShutdown.Error()
    16  
    17  // IsErrEOF returns true if we get an EOF error from the socket itself, or
    18  // an EOF equivalent error from yamux.
    19  func IsErrEOF(err error) bool {
    20  	if err == nil {
    21  		return false
    22  	}
    23  	if errors.Is(err, io.EOF) {
    24  		return true
    25  	}
    26  
    27  	errStr := err.Error()
    28  	if strings.Contains(errStr, yamuxStreamClosed) ||
    29  		strings.Contains(errStr, yamuxSessionShutdown) {
    30  		return true
    31  	}
    32  
    33  	var serverError rpc.ServerError
    34  	if errors.As(err, &serverError) {
    35  		return strings.HasSuffix(err.Error(), fmt.Sprintf(": %s", io.EOF.Error()))
    36  	}
    37  
    38  	return false
    39  }