Author: tack
Date: Wed Apr 19 01:41:40 2006
New Revision: 1414

Modified:
   trunk/base/src/ipc.py

Log:
Exception cleanup


Modified: trunk/base/src/ipc.py
==============================================================================
--- trunk/base/src/ipc.py       (original)
+++ trunk/base/src/ipc.py       Wed Apr 19 01:41:40 2006
@@ -17,7 +17,7 @@
 
 import logging
 import socket, os, select, time, types, struct, cPickle, thread, sys, sha
-import popen2
+import popen2, errno
 import traceback, string, copy_reg
 from new import classobj
 import kaa.notifier
@@ -88,17 +88,26 @@
     return i
 
 
-
-class IPCDisconnectedError(Exception):
+class IPCError(Exception):
     pass
 
-class IPCTimeoutError(Exception):
+class IPCSocketError(socket.error, IPCError):
     pass
 
-class IPCAuthenticationError(Exception):
+class IPCDisconnectedError(IPCSocketError):
+    def __init__(self):
+        socket.error.__init__(self, errno.ECONNRESET, "Remote disconnected")
+
+
+class IPCTimeoutError(IPCSocketError):
+    def __init__(self, type):
+        socket.error.__init__(self, errno.ETIMEDOUT, "IPC operation timed out 
with request type '%s'" % type)
+
+
+class IPCAuthenticationError(IPCError):
     pass
 
-class IPCRemoteException(Exception):
+class IPCRemoteException(IPCError):
     def __init__(self, remote_exc, remote_value, remote_tb):
         self.exc = remote_exc
         self.val = remote_value
@@ -122,13 +131,13 @@
                 try:
                     s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
                     s.connect(address)
-                except socket.error, e:
-                    if e[0] == 111:
+                except socket.error, (err, msg):
+                    if err == errno.ECONNREFUSED:
                         # not running, everything is fine
                         log.info('remove socket from dead server')
                     else:
                         # some error we do not expect
-                        raise e
+                        raise socket.error(err, msg)
                 else:
                     # server already running
                     raise IOError('server already running')
@@ -214,7 +223,11 @@
                 self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
             if type(server_or_address) == tuple:
                 self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            self.socket.connect(server_or_address)
+            try:
+                self.socket.connect(server_or_address)
+            except socket.error, (err, msg):
+                raise IPCSocketError(err, msg)
+
             self.socket.setblocking(False)
             self.server = None
         else:
@@ -278,8 +291,8 @@
     def handle_read(self):
         try:
             data = self.socket.recv(1024*1024)
-        except socket.error, (errno, msg):
-            if errno == 11:
+        except socket.error, (err, msg):
+            if err == errno.EAGAIN:
                 # Resource temporarily unavailable -- we are trying to read
                 # data on a socket when none is available.
                 return
@@ -368,8 +381,8 @@
             self.write_buffer = self.write_buffer[sent:]
             if not self.write_buffer:
                 self._wmon.unregister()
-        except socket.error, (errno, msg):
-            if errno == 11:
+        except socket.error, (err, msg):
+            if err == errno.EAGAIN:
                 # Resource temporarily unavailable -- we are trying to write
                 # data to a socket when none is available.
                 return
@@ -729,7 +742,7 @@
             return self.handle_reply(*self._wait_queue[seq][2])
         elif timeout > 0:
             del self._wait_queue[seq]
-            raise IPCTimeoutError, (type,)
+            raise IPCTimeoutError(type)
 
 
     def reply(self, type, data, seq):
@@ -982,6 +995,7 @@
         except IPCDisconnectedError:
             pass
 
+
     def _ipc_get_str(self):
         if self._ipc_client:
             if self._ipc_client.socket:


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to