diff options
Diffstat (limited to 'distbuild/sockserv.py')
-rw-r--r-- | distbuild/sockserv.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/distbuild/sockserv.py b/distbuild/sockserv.py index 156394e2..964352e7 100644 --- a/distbuild/sockserv.py +++ b/distbuild/sockserv.py @@ -22,6 +22,10 @@ from sm import StateMachine from socketsrc import NewConnection, SocketError, ListeningSocketEventSource +class _Close(object): + pass + + class ListenServer(StateMachine): '''Listen for new connections on a port, send events for them.''' @@ -46,9 +50,12 @@ class ListenServer(StateMachine): # state, source, event_class, new_state, callback ('listening', src, NewConnection, 'listening', self.new_conn), ('listening', src, SocketError, None, self.report_error), + ('listening', self, _Close, None, self._really_close), ] self.add_transitions(spec) + self._src = src + def new_conn(self, event_source, event): logging.debug( 'ListenServer: Creating new %s using %s and %s' % @@ -61,3 +68,9 @@ class ListenServer(StateMachine): def report_error(self, event_source, event): logging.error(str(event)) + def close(self): + self.mainloop.remove_event_source(self._src) + self.mainloop.queue_event(self, _Close()) + + def _really_close(self, event_source, event): + self._src.close() |