mirror of
https://github.com/sshuttle/sshuttle.git
synced 2025-04-16 07:18:55 +02:00
Handle EHOSTDOWN, ENETDOWN.
Someone on the mailing list reported getting these. Also centralize the list of these errors, so we don't have different parts of the code supporting a different subset of them. Now just use ssnet.NET_ERRS.
This commit is contained in:
parent
e2474543fc
commit
c5834a9773
@ -130,7 +130,7 @@ class DnsProxy(Handler):
|
|||||||
try:
|
try:
|
||||||
self.sock.send(self.request)
|
self.sock.send(self.request)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e.args[0] in [errno.ECONNREFUSED, errno.EHOSTUNREACH]:
|
if e.args[0] in ssnet.NET_ERRS:
|
||||||
# might have been spurious; try again.
|
# might have been spurious; try again.
|
||||||
# Note: these errors sometimes are reported by recv(),
|
# Note: these errors sometimes are reported by recv(),
|
||||||
# and sometimes by send(). We have to catch both.
|
# and sometimes by send(). We have to catch both.
|
||||||
@ -145,7 +145,7 @@ class DnsProxy(Handler):
|
|||||||
try:
|
try:
|
||||||
data = self.sock.recv(4096)
|
data = self.sock.recv(4096)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e.args[0] in [errno.ECONNREFUSED, errno.EHOSTUNREACH]:
|
if e.args[0] in ssnet.NET_ERRS:
|
||||||
# might have been spurious; try again.
|
# might have been spurious; try again.
|
||||||
# Note: these errors sometimes are reported by recv(),
|
# Note: these errors sometimes are reported by recv(),
|
||||||
# and sometimes by send(). We have to catch both.
|
# and sometimes by send(). We have to catch both.
|
||||||
|
8
ssnet.py
8
ssnet.py
@ -42,6 +42,10 @@ cmd_to_name = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NET_ERRS = [errno.ECONNREFUSED, errno.ETIMEDOUT,
|
||||||
|
errno.EHOSTUNREACH, errno.ENETUNREACH,
|
||||||
|
errno.EHOSTDOWN, errno.ENETDOWN]
|
||||||
|
|
||||||
|
|
||||||
def _add(l, elem):
|
def _add(l, elem):
|
||||||
if not elem in l:
|
if not elem in l:
|
||||||
@ -151,9 +155,7 @@ class SockWrapper:
|
|||||||
elif e.args[0] == errno.EISCONN:
|
elif e.args[0] == errno.EISCONN:
|
||||||
# connected successfully (BSD)
|
# connected successfully (BSD)
|
||||||
self.connect_to = None
|
self.connect_to = None
|
||||||
elif e.args[0] in [errno.ECONNREFUSED, errno.ETIMEDOUT,
|
elif e.args[0] in NET_ERRS + [errno.EACCES, errno.EPERM]:
|
||||||
errno.EHOSTUNREACH, errno.ENETUNREACH,
|
|
||||||
errno.EACCES, errno.EPERM]:
|
|
||||||
# a "normal" kind of error
|
# a "normal" kind of error
|
||||||
self.connect_to = None
|
self.connect_to = None
|
||||||
self.seterr(e)
|
self.seterr(e)
|
||||||
|
Loading…
Reference in New Issue
Block a user