diff --git a/supwisdom/protocol/smart999protocol.py b/supwisdom/protocol/smart999protocol.py
index 176b7a1..c5a8ee3 100644
--- a/supwisdom/protocol/smart999protocol.py
+++ b/supwisdom/protocol/smart999protocol.py
@@ -98,16 +98,18 @@
 
 class ProtocolError(BaseException):
     def __init__(self, msg):
-        super(ProtocolError,self).__init__()
+        super(ProtocolError, self).__init__()
         self.msg = msg
 
 
 class Smart999Connection(object):
-    def __init__(self, ip, port):
+    def __init__(self, ip, port, debug=1):
         self.ip = ip
         self.port = port
         self.sock = None
-        self.errmsg = None
+        self.errmsg = ""
+        self.debug = debug
+        self._last_exec_err = 0
 
     def connect(self, timeout=10.0):
         try:
@@ -115,12 +117,15 @@
             sock.settimeout(timeout)
             sock.connect((self.ip, self.port))
             self.sock = sock
+            logging.info(u"连接[%s:%d]成功" % (self.ip, self.port))
             return True
         except socket.error, msg:
             self.errmsg = unicode(msg)
+            logging.info(u"连接[%s:%d]失败[%s]" % (self.ip, self.port, self.errmsg))
             return False
 
     def disconnect(self):
+        self._last_exec_err = 0
         if self.sock:
             try:
                 self.sock.close()
@@ -132,12 +137,18 @@
         return self.sock != None
 
     def log(self, data):
+        if not self.debug:
+            return
         try:
             print "CMD[%s]" % codecs.encode(data, 'hex')
         except:
             pass
 
     def send_command(self, request, response, timeout=10.0):
+        if not self.is_connected():
+            if not self.connect(timeout):
+                logging.error(u"尝试重连设备失败")
+                return False
         protocol = Smart999Protocol()
         cmd = protocol.pack(request)
         self.log(cmd)
@@ -165,11 +176,15 @@
                     self.errmsg = u"接收数据未收到结束符"
                     return False
                 self.sock.settimeout(timeout - est)
+            self._last_exec_err = 0
         except socket.error, msg:
-            if msg.errno == errno.ECONNABORTED:
-                self.sock.close()
-                self.sock = None
+            if msg.errno != None and msg.errno != errno.EWOULDBLOCK:
+                self.disconnect()
                 logging.error(u"远程连接[%s]已关闭！" % self.ip)
+            else:
+                self._last_exec_err += 1
+                if self._last_exec_err > 50:
+                    self.disconnect()
             self.errmsg = unicode(msg)
             return False
         except Exception, ex:
