Commit 21235886 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

add: tcptunnel better detection of disconnection

parent 9bcbc99b
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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: