diff --git a/contrib/onelab2/python/onelab2.py b/contrib/onelab2/python/onelab2.py
index de33fc26d40924663457cbc32520122c6193bcb8..7397f85add6cb54ce108df5aff15c7b7a0bd7202 100755
--- a/contrib/onelab2/python/onelab2.py
+++ b/contrib/onelab2/python/onelab2.py
@@ -212,7 +212,20 @@ class client :
       #self.socket.send(struct.pack('ii%is' %len(m), t, len(m), m))
 
   def _clearbuffer(self):
-    self.socket.recv(1024)
+    self.socket.settimeout(0.)
+    try:
+      msg = self.socket.recv(1024)
+    except socket.error:
+      self.socket.settimeout(None)
+      return
+    self.socket.settimeout(None)
+    if len(msg) >= 4:
+      v, t, l = struct.unpack('!BBH', msg[:4])
+      if t == self._ONELAB_MESSAGE :
+        print('onelab info : %s' % msg)
+      elif t == self._ONELAB_STOP :
+        print('server ask to stop')
+        os._exit(1)
 
   def _receive(self) :
     def buffered_receive(l) :
@@ -230,6 +243,9 @@ class client :
     msg = buffered_receive(l)
     if t == self._ONELAB_MESSAGE :
       print('onelab info : %s' % msg)
+    elif t == self._ONELAB_STOP:
+      print('server ask to stop')
+      os._exit(1)
     return t, msg
 
   def _parseParameter(msg):
@@ -274,6 +290,7 @@ class client :
         param.frombytes(msg)
       elif ptype == 0x0A and warn_if_not_found:
         print('Unknown parameter %s' %(param.name))
+    self._clearbuffer()
 
   def defineNumber(self, name, **param):
     if 'labels' in param :
@@ -363,7 +380,7 @@ class client :
     else:
       cmd = command + ' ' + arguments
     os.system(cmd);
-    self._numSubClients +=1
+    self._numSubClients += 1
     self.getString(name+'/Action', False)
 
   def runSubClient(self, name, command, arguments=''):