From 3142d978c35e1091b3959429236ec4d73296e1ab Mon Sep 17 00:00:00 2001 From: Karol Latecki Date: Wed, 11 Apr 2018 14:42:58 +0200 Subject: [PATCH] scripts/rpc.py: Handle socket connection error Handle socket exception, print it and exit cleanly. Change-Id: I7ac899dfe329c7512339549991abea8a6cb09608 Signed-off-by: Karol Latecki Reviewed-on: https://review.gerrithub.io/407308 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Dariusz Stojaczyk --- scripts/rpc.py | 6 +++++- scripts/rpc/client.py | 26 +++++++++++++++----------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/scripts/rpc.py b/scripts/rpc.py index 2d010f1d2..fbbbdc330 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -932,5 +932,9 @@ if __name__ == "__main__": args = parser.parse_args() - args.client = rpc.client.JSONRPCClient(args.server_addr, args.port, args.verbose, args.timeout) + try: + args.client = rpc.client.JSONRPCClient(args.server_addr, args.port, args.verbose, args.timeout) + except JSONRPCException as ex: + print(ex.message) + exit(1) args.func(args) diff --git a/scripts/rpc/client.py b/scripts/rpc/client.py index f1e5482d3..e532c0fd8 100755 --- a/scripts/rpc/client.py +++ b/scripts/rpc/client.py @@ -16,17 +16,21 @@ class JSONRPCClient(object): def __init__(self, addr, port=None, verbose=False, timeout=60.0): self.verbose = verbose self.timeout = timeout - if addr.startswith('/'): - self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - self.sock.connect(addr) - elif ':' in addr: - for res in socket.getaddrinfo(addr, port, socket.AF_INET6, socket.SOCK_STREAM, socket.SOL_TCP): - af, socktype, proto, canonname, sa = res - self.sock = socket.socket(af, socktype, proto) - self.sock.connect(sa) - else: - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.sock.connect((addr, port)) + try: + if addr.startswith('/'): + self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self.sock.connect(addr) + elif ':' in addr: + for res in socket.getaddrinfo(addr, port, socket.AF_INET6, socket.SOCK_STREAM, socket.SOL_TCP): + af, socktype, proto, canonname, sa = res + self.sock = socket.socket(af, socktype, proto) + self.sock.connect(sa) + else: + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.connect((addr, port)) + except socket.error as ex: + raise JSONRPCException("Error while connecting to %s\n" + "Error details: %s" % (addr, ex)) def __del__(self): self.sock.close()