fix `SocketService`
paulfantom committed
Jul 15, 2016 at 20:35 UTC
54c79c47770b513baab4174195f423f9be268af5
1 file changed
+10
-24
python.d/python_modules/base.py
+10
-24
@@ -485,7 +485,8 @@ class SocketService(SimpleService):
485
Get raw data with low-level "socket" module.
486
:return: str
487
"""
488
- if self._sock is None:
488
+ #if self._sock is None:
489
+ if True:
490
try:
491
if self.unix_socket is None:
492
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -513,37 +514,22 @@ class SocketService(SimpleService):
514
self._sock.send(self.request)
515
except Exception as e:
516
try:
516
- self._sock.shutdown(1)
517
+ self._sock.shutdown(0)
518
self._sock.close()
519
except:
520
pass
521
self._sock = None
522
self.error(str(e), "used configuration: host:", str(self.host), "port:", str(self.port), "socket:", str(self.unix_socket))
523
return None
523
- # data = ""
524
- # import select
525
- # while True:
526
- # try:
527
- # ready_to_read, _, in_error = select.select([sock, ], [], [], 0.01)
528
- # except Exception as e:
529
- # self.debug("SELECT", str(e))
530
- # sock.shutdown(0)
531
- # break
532
- # if len(ready_to_read) > 0:
533
- # buf = sock.recv(1024)
534
- # if len(buf) == 0 or buf is None:
535
- # break
536
- # data += buf.decode()
537
- # if data == "":
538
- # return None
539
- # return data
524
525
size = 2
526
try:
527
data = self._sock.recv(size).decode()
528
except Exception as e:
529
self.error(str(e), "used configuration: host:", str(self.host), "port:", str(self.port), "socket:", str(self.unix_socket))
530
+ self._sock.shutdown(0)
531
self._sock.close()
532
+ self._sock = None
533
return None
534
535
while True:
@@ -552,11 +538,11 @@ class SocketService(SimpleService):
538
size *= 2
539
buf = self._sock.recv(size)
540
data += buf.decode()
555
- if len(buf) < size:
556
- if self._more_data_available():
557
- size = 2
558
- else:
559
- break
541
+ if len(buf) == 0: break
542
+ if len(buf) < size and not self._more_data_available():
543
+ break
544
+ else:
545
+ size = 4
546
547
return data
548