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 }