Skip to content
Snippets Groups Projects
Commit 21235886 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

add: tcptunnel better detection of disconnection

parent 9bcbc99b
No related branches found
No related tags found
No related merge requests found
......@@ -981,7 +981,7 @@ class TCPTunnelJob(BaseJob):
except socket.timeout:
pass
if self._sock_server is None:
return # job cancelled
break # job cancelled
## connect to the endpoint
timeout = 15 # FIXME must be argument
......@@ -1000,7 +1000,7 @@ class TCPTunnelJob(BaseJob):
self._log.append('socket error (connection refused ?)')
time.sleep(retry_interval)
if self._cancelled:
return
break
if not connected:
continue
......@@ -1014,11 +1014,11 @@ class TCPTunnelJob(BaseJob):
# forward data until a connection is closed
buf_server = ''
buf_client = ''
empty_buf = 0
connected = True
while not self._cancelled and connected:
# wait for events on both sockets
poll = poller.poll()
## process events for read/write operations only
for fd, events in poll:
# events are for server socket
if fd == self._sock_server.fileno():
......@@ -1029,6 +1029,10 @@ class TCPTunnelJob(BaseJob):
read = self._sock_server.recv(4096)
except socket.error:
connected = False
if not len(read):
empty_buf += 1
else:
empty_buf = 0
buf_server += read
# set the other socket to notify us when it's
# available for writing
......@@ -1055,6 +1059,10 @@ class TCPTunnelJob(BaseJob):
read = self._sock_client.recv(4096)
except socket.error:
connected = False
if not len(read):
empty_buf += 1
else:
empty_buf = 0
buf_client += read
# set the other socket to notify us when it's
# available for writing
......@@ -1072,6 +1080,8 @@ class TCPTunnelJob(BaseJob):
# if the buffer becomes empty, stop write polling
if not len(buf_server):
poller.modify(self._sock_client, mask_ro)
if empty_buf >= 10:
connected = False
if connected is False:
self._log.append('disconnected')
try:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment