1

我有一个扭曲的插件,它监听一个端口并做非常简单的事情。问题是当我启动它时,如果帖子不可用,它只是坐在那里,进程正在运行,但什么也不做。在这种情况下,我需要该进程立即退出,以便更大的系统可以注意到并处理该问题

我有这样的代码:

def makeService(options):
    root = Resource() #  Not what I actually have...
    factory = server.Site(root)
    server_string = b'tcp:{0}:interface={1}'.format(options['port'], options['interface'])
    endpoint = endpoints.serverFromString(reactor, server_string)
    service = internet.StreamServerEndpointService(endpoint, factory)
    return service

这导致:

2016-12-19T11:42:21-0600] [info] [3082] [-] Log opened.
[2016-12-19T11:42:21-0600] [info] [3082] [-] twistd 15.5.0 (/home/matthew/code-venvs/wgcbap/bin/python 2.7.6) starting up.
[2016-12-19T11:42:21-0600] [info] [3082] [-] reactor class: twisted.internet.epollreactor.EPollReactor.
[2016-12-19T11:42:21-0600] [critical] [3082] [-] Unhandled Error
        Traceback (most recent call last):
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/scripts/_twistd_unix.py", line 394, in startApplication
            service.IService(application).privilegedStartService()
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/application/service.py", line 278, in privilegedStartService
            service.privilegedStartService()
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/application/internet.py", line 352, in privilegedStartService
            self._waitingForPort = self.endpoint.listen(self.factory)
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/internet/endpoints.py", line 457, in listen
            interface=self._interface)
        --- <exception caught here> ---
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 121, in execute
            result = callable(*args, **kw)
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 478, in listenTCP
            p.startListening()
          File "/home/matthew/code-venvs/wgcbap/local/lib/python2.7/site-packages/twisted/internet/tcp.py", line 984, in startListening
            raise CannotListenError(self.interface, self.port, le)
        twisted.internet.error.CannotListenError: Couldn't listen on 127.0.0.1:9999: [Errno 98] Address already in use.

它继续运行,什么都不做......

service._raiseSynchronously = True在 return 正上方添加一行可以工作,但似乎没有记录并且感觉很脏。

有批准的方法来做到这一点吗?

4

0 回答 0