diff options
author | Max <msuraev@sysmocom.de> | 2017-01-11 15:10:16 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-01-23 12:31:45 +0000 |
commit | 47e178190744e65079a821f40148eebcaa92bf76 (patch) | |
tree | 6701b0e0e61628b16c1d26b7e821622c055d1292 | |
parent | a5e369300f77269b2f6b596c2bf7f53795602a0c (diff) |
bsc_control.py: fix blocking
Previously reading from socket would block if no data were sent by
the server. Use non-blocking read for set and get operations.
Change-Id: I706d54a4a7ceef62683bf9a2fe63fc9ab331c24e
-rwxr-xr-x | openbsc/contrib/bsc_control.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/openbsc/contrib/bsc_control.py b/openbsc/contrib/bsc_control.py index 66a41eb98..3a7964de6 100755 --- a/openbsc/contrib/bsc_control.py +++ b/openbsc/contrib/bsc_control.py @@ -30,8 +30,14 @@ def get_var(sck, var): (_, _, v) = do_set_get(sck, var) return v -def _leftovers(sck): - data = sck.recv(1024) +def _leftovers(sck, fl): + """ + Read outstanding data if any according to flags + """ + try: + data = sck.recv(1024, fl) + except socket.error as (s_errno, strerror): + return False if len(data) != 0: tail = data while True: @@ -75,19 +81,19 @@ if __name__ == '__main__': if options.cmd_set: if len(args) < 2: parser.error("Set requires var and value arguments") - _leftovers(sock) + _leftovers(sock, socket.MSG_DONTWAIT) print "Got message:", set_var(sock, args[0], ' '.join(args[1:])) if options.cmd_get: if len(args) != 1: parser.error("Get requires the var argument") - _leftovers(sock) + _leftovers(sock, socket.MSG_DONTWAIT) (a, _, _) = do_set_get(sock, args[0]) print "Got message:", a if options.monitor: while True: - if not _leftovers(sock): + if not _leftovers(sock, 0): print "Connection is gone." break sock.close() |