Add timeout to query (#19)

This commit is contained in:
Austin 2017-01-07 14:42:31 -08:00 committed by GadgetReactor
parent fd4e363f56
commit 1e01530447
2 changed files with 15 additions and 12 deletions

View File

@ -39,20 +39,23 @@ class TPLinkSmartHomeProtocol:
request = json.dumps(request)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
sock.settimeout(5.0)
try:
sock.connect((host, port))
_LOGGER.debug("> (%i) %s", len(request), request)
sock.send(TPLinkSmartHomeProtocol.encrypt(request))
_LOGGER.debug("> (%i) %s", len(request), request)
sock.send(TPLinkSmartHomeProtocol.encrypt(request))
buffer = bytes()
while True:
chunk = sock.recv(4096)
buffer += chunk
if not chunk:
break
buffer = bytes()
while True:
chunk = sock.recv(4096)
buffer += chunk
if not chunk:
break
sock.shutdown(socket.SHUT_RDWR)
sock.close()
finally:
sock.shutdown(socket.SHUT_RDWR)
sock.close()
response = TPLinkSmartHomeProtocol.decrypt(buffer[4:])
_LOGGER.debug("< (%i) %s", len(response), response)

View File

@ -103,7 +103,7 @@ class SmartPlug:
request={target: {cmd: arg}}
)
except Exception as ex:
raise SmartPlugException(ex)
raise SmartPlugException(ex) from ex
result = response[target]
if "err_code" in result and result["err_code"] != 0: