Skip to content

Commit

Permalink
handle connection errors with dedicated method
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Aug 16, 2023
1 parent a4dfb48 commit 1fa7223
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 10 deletions.
4 changes: 1 addition & 3 deletions broker/src/tunneldigger_broker/eventloop.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import select

from . import protocol

class EventLoop(object):
"""
An epoll-based event loop.
Expand Down Expand Up @@ -59,7 +57,7 @@ def start(self):
if event & select.EPOLLIN:
pollable.read(file_object)
elif event & select.EPOLLERR or event & select.EPOLLHUP:
pollable.close(reason=protocol.ERROR_REASON_FAILURE)
pollable.error()
except IOError:
# IOError get produced by signal even. in version 3.5 this is fixed an the poll retries
# TODO: in py3 it's InterruptedError
Expand Down
12 changes: 8 additions & 4 deletions broker/src/tunneldigger_broker/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import subprocess
import logging

from . import protocol

# Logger.
logger = logging.getLogger("tunneldigger.hooks")

Expand Down Expand Up @@ -52,7 +50,10 @@ def register(self, event_loop):
event_loop.register(self, self.process.stderr, select.EPOLLIN)
self.event_loop = event_loop

def close(self, reason=protocol.ERROR_REASON_UNDEFINED):
def error(self):
self.close()

def close(self):
"""
Closes the hook process.
"""
Expand Down Expand Up @@ -162,7 +163,10 @@ def run_hook(self, name, *args):
except OSError as e:
logger.error("Error while executing script '%s': %s" % (script, e))

def close(self, reason=protocol.ERROR_REASON_UNDEFINED):
def error(self):
self.close()

def close(self):
os.close(self.sigchld_fd)

def read(self, file_object):
Expand Down
12 changes: 9 additions & 3 deletions broker/src/tunneldigger_broker/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,10 @@ def register(self, event_loop):
event_loop.register(self, self.socket, select.EPOLLIN)
self.event_loop = event_loop

def close(self, reason=protocol.ERROR_REASON_UNDEFINED):
def error(self):
self.close()

def close(self):
"""
Closes the underlying socket and stops all timers.
"""
Expand All @@ -63,7 +66,7 @@ def close(self, reason=protocol.ERROR_REASON_UNDEFINED):
self.socket.close()

for timer in self.timers.copy():
timer.close(reason)
timer.close()

def create_timer(self, callback, timeout=None, interval=None):
"""
Expand Down Expand Up @@ -102,7 +105,10 @@ def read(timer_self, file_object):
if interval is None:
timer_self.close()

def close(timer_self, reason=protocol.ERROR_REASON_UNDEFINED):
def error(self):
self.close()

def close(timer_self):
self.event_loop.unregister(timer)
self.timers.remove(timer_self)
os.close(timer)
Expand Down
3 changes: 3 additions & 0 deletions broker/src/tunneldigger_broker/tunnel.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,9 @@ def keepalive(self):
logger.warning("Tunnel %d (%s) timed out", self.tunnel_id, self.uuid)
self.close(reason=protocol.ERROR_REASON_TIMEOUT)

def error(self):
self.close(reason=protocol.ERROR_REASON_FAILURE)

def close(self, reason=protocol.ERROR_REASON_UNDEFINED):
"""
Closes the tunnel.
Expand Down

0 comments on commit 1fa7223

Please sign in to comment.