[Uludag-commits] r10087 - trunk/comar/api/comar

svn-uludag at uludag.org.tr svn-uludag at uludag.org.tr
2 Kas 2006 Per 10:49:23 EET


Author: gurer
Date: Thu Nov  2 10:49:23 2006
New Revision: 10087

Modified:
   trunk/comar/api/comar/__init__.py
Log:
exception düzenlemesi, fixy #2


Modified: trunk/comar/api/comar/__init__.py
=================================================================
--- trunk/comar/api/comar/__init__.py	(original)
+++ trunk/comar/api/comar/__init__.py	Thu Nov  2 10:49:23 2006
@@ -21,7 +21,12 @@
 import select
 import struct
 
-class Error(Exception):
+class CannotConnect(Exception):
+    """Connection to the comar failed"""
+    pass
+
+class LinkClosed(Exception):
+    """Connection with comar is closed"""
     pass
 
 
@@ -113,7 +118,7 @@
             self.sock = socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)
             self.sock.connect(sockname)
         except:
-            raise Error('Cannot connect to the COMAR daemon')
+            raise CannotConnect('Connection to COMAR socket %s failed' % sockname)
     
     def __pack(self, cmd, id, args):
         size = 0
@@ -130,6 +135,16 @@
         pak = struct.pack(fmt, (cmd << 24) | size, id, *args2)
         return pak
     
+    def __recv(self, size):
+        data = ""
+        while size:
+            tmp = self.sock.recv(size, socket.MSG_WAITALL)
+            if tmp == "":
+                raise LinkClosed("recv failed at %d of %d" % (size, len(data)))
+            data += tmp
+            size -= len(tmp)
+        return data
+    
     def read(self):
         """Read a reply from comar.
         
@@ -158,18 +173,12 @@
         fds = select.select([self.sock], [], [], 0)
         if fds[0] == []:
             return None
-        try:
-            data = self.sock.recv(8, socket.MSG_WAITALL)
-        except:
-            raise
+        data = self.__recv(8)
         head = struct.unpack('!ii', str(data))
         cmd = head[0] >> 24
         size = head[0] & 0x00ffffff
         if size:
-            try:
-                data = self.sock.recv(size, socket.MSG_WAITALL)
-            except:
-                raise Error('Connection closed')
+            data = self.__recv(size)
         else:
             data = None
         


Uludag-commits mesaj listesiyle ilgili daha fazla bilgi