SocketService - one more try
paulfantom committed
Jul 13, 2016 at 23:11 UTC
0f761a381f2228d38e8549ce5acb6e56630238f1
1 file changed
+17
-20
python.d/python_modules/base.py
+17
-20
@@ -488,12 +488,16 @@ class SocketService(SimpleService):
488
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
489
#sock.setsockopt(socket.SOL_SOCKET, socket.TCP_NODELAY, 1)
490
#sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
491
- sock.settimeout(self.update_every)
491
+ #sock.settimeout(self.update_every)
492
+ sock.settimeout(0.5)
493
sock.connect((self.host, self.port))
494
+ sock.settimeout(0.5) # Just to be sure
495
else:
496
sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
495
- sock.settimeout(self.update_every)
497
+ #sock.settimeout(self.update_every)
498
+ sock.settimeout(0.05)
499
sock.connect(self.unix_socket)
500
+ sock.settimeout(0.05) # Just to be sure
501
502
except Exception as e:
503
self.error(str(e))
@@ -512,30 +516,23 @@ class SocketService(SimpleService):
516
self.sock = None
517
return None
518
515
- #data = sock.recv(2)
516
- # data = ""
517
- # try:
518
- # while True:
519
- # #try:
520
- # buf = sock.recv(1024, 0x40) # get 1024 bytes in NON-BLOCKING mode
521
- # #except socket.error:
522
- # # break
523
- #
524
- # if len(buf) == 0:
525
- # break
526
- # else:
527
- # data += buf.decode()
528
- # except Exception as e:
529
- # self.error(str(e))
530
- # sock.close()
531
- # return None
519
+ size = 2
520
try:
533
- data = sock.recv(65535, 0x40).decode()
521
+ data = sock.recv(size).decode()
522
except Exception as e:
523
self.error(str(e))
524
sock.close()
525
return None
526
527
+ while True:
528
+ # implement something like TCP Window Scaling
529
+ if size < 4096:
530
+ size *= 2
531
+ buf = sock.recv(size)
532
+ data += buf.decode()
533
+ if len(buf) < size:
534
+ break
535
+
536
return data
537
538
def _parse_config(self):