File tree 3 files changed +52
-6
lines changed 3 files changed +52
-6
lines changed Original file line number Diff line number Diff line change
1
+ // Copyright (c) 2025 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exhttp
8
+
9
+ import (
10
+ "errors"
11
+ "net"
12
+ "syscall"
13
+
14
+ "golang.org/x/net/http2"
15
+ )
16
+
17
+ func IsNetworkError (err error ) bool {
18
+ for err != nil {
19
+ if _ , ok := err .(net.Error ); ok {
20
+ return true
21
+ } else if _ , ok := err .(* net.OpError ); ok {
22
+ return true
23
+ } else if errno , ok := err .(syscall.Errno ); ok {
24
+ // common errnos for network related operations
25
+ return errno == syscall .ENETDOWN ||
26
+ errno == syscall .ENETUNREACH ||
27
+ errno == syscall .ENETRESET ||
28
+ errno == syscall .ECONNABORTED ||
29
+ errno == syscall .ECONNRESET ||
30
+ errno == syscall .ENOBUFS ||
31
+ errno == syscall .ETIMEDOUT ||
32
+ errno == syscall .ECONNREFUSED ||
33
+ errno == syscall .EHOSTDOWN ||
34
+ errno == syscall .EHOSTUNREACH
35
+ } else if errors .As (err , & http2.StreamError {}); ok {
36
+ return true
37
+ }
38
+
39
+ err = errors .Unwrap (err )
40
+ }
41
+
42
+ return false
43
+ }
Original file line number Diff line number Diff line change @@ -11,8 +11,9 @@ require (
11
11
github.com/rs/zerolog v1.33.0
12
12
github.com/stretchr/testify v1.10.0
13
13
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
14
- golang.org/x/sys v0.31.0
15
- golang.org/x/text v0.23.0
14
+ golang.org/x/net v0.40.0
15
+ golang.org/x/sys v0.33.0
16
+ golang.org/x/text v0.25.0
16
17
google.golang.org/protobuf v1.36.5
17
18
gopkg.in/yaml.v3 v3.0.1
18
19
)
Original file line number Diff line number Diff line change @@ -28,13 +28,15 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
28
28
github.com/stretchr/testify v1.10.0 /go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY =
29
29
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw =
30
30
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 /go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM =
31
+ golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY =
32
+ golang.org/x/net v0.40.0 /go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds =
31
33
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab /go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg =
32
34
golang.org/x/sys v0.6.0 /go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg =
33
35
golang.org/x/sys v0.12.0 /go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg =
34
- golang.org/x/sys v0.31 .0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik =
35
- golang.org/x/sys v0.31 .0 /go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k =
36
- golang.org/x/text v0.23 .0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY =
37
- golang.org/x/text v0.23 .0 /go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4 =
36
+ golang.org/x/sys v0.33 .0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw =
37
+ golang.org/x/sys v0.33 .0 /go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k =
38
+ golang.org/x/text v0.25 .0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4 =
39
+ golang.org/x/text v0.25 .0 /go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA =
38
40
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM =
39
41
google.golang.org/protobuf v1.36.5 /go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE =
40
42
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM =
You can’t perform that action at this time.
0 commit comments