Reputation: 560
After working through some of the basic tutorials, I want my TCP/UDP client to exit with a code indicating whether it connected or not. The right way to return an exit code in Twisted is:
point = TCP4ClientEndpoint(reactor, "localhost", 1234)
d = connectProtocol(point, ClientProtocol())
reactor.run()
sys.exit(0)
Then, when the process terminates, it will exit with code 0 to indicate a normal termination. If the client instead times out instead of successfully connecting, how should it pass a value back to that can then be passed to sys.exit instead of the constant 0?
Upvotes: 0
Views: 96
Reputation: 48315
Determining whether the TCP connection succeeded or failed is accomplished by attending to the result of the Deferred:
d = connectProtocol(point, ClientProtocol())
d.addCallbacks(
connected,
did_not_connect,
)
With appropriate implementations of connected
and did_not_connect
, you should be able to pass a suitable value to a subsequent sys.exit
call.
For example,
class Main(object):
result = 1
def connected(self, passthrough):
self.result = 0
return passthrough
def did_not_connect(self, passthrough):
self.result = 2
return passthrough
def exit(self):
sys.exit(self.result)
main = Main()
d = connectProtocol(point, ClientProtocol())
d.addCallbacks(
main.connected,
main.did_not_connect,
)
reactor.run()
main.exit()
Upvotes: 2