From 83f0af36305cb9b5523a2b8ccb24fa6520949aa2 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Fri, 26 Oct 2012 16:21:21 +0200 Subject: [PATCH] suricatasc: improve reading when system is loaded --- scripts/suricatasc/suricatasc.in | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/scripts/suricatasc/suricatasc.in b/scripts/suricatasc/suricatasc.in index eceb4617a1..4b36dd4345 100755 --- a/scripts/suricatasc/suricatasc.in +++ b/scripts/suricatasc/suricatasc.in @@ -31,15 +31,23 @@ COMMANDS_REGEX = re.compile("^(?:shutdown|quit|reload-rules|pcap-file .+|pcap-fi socket = socket(AF_UNIX) socket.connect(SOCKET_PATH) +socket.settimeout(10) #send version socket.send(json.dumps({"version": VERSION})) -sleep(0.2) # get return -data = socket.recv(SIZE) -#decode json message -cmdret = json.loads(data) +cmdret = None +i = 0 +data = "" +while i < 5: + i += 1 + data += socket.recv(SIZE) + try: + cmdret = json.loads(data) + break + except json.decoder.JSONDecodeError: + sleep(0.3) # if ok loop if cmdret["return"] == "NOK": @@ -72,10 +80,17 @@ try: else: cmdmsg["command"] = command socket.send(json.dumps(cmdmsg)) - sleep(0.3) - data = socket.recv(SIZE) + i = 0 + data = "" + while i < 3: + i += 1 + data += socket.recv(SIZE) + try: + cmdret = json.loads(data) + break + except json.decoder.JSONDecodeError: + sleep(0.3) #decode json message - cmdret = json.loads(data) if cmdret["return"] == "NOK": print "Error: %s" % (cmdret["message"]) else: @@ -87,4 +102,6 @@ except KeyboardInterrupt: print "[+] Quit command client" +socket.close() + sys.exit(1)