]> gitweb.pimeys.fr Git - python-myirclib.git/blob - safesystemcall.py
On teste que le code d'erreur et pas son message parce que si on change les locales...
[python-myirclib.git] / safesystemcall.py
1 #!/usr/bin/python
2 # -*- encoding: utf-8 -*-
3
4 #
5 # Trouvé sur http://stackoverflow.com/questions/5633067/signal-handling-in-pylons
6 # Utilisé comme décorateur, fait en sorte de réessayer quand une erreur EINTR est levée
7 # (typiquement en cas de signal SIGHUP envoyé, j'en sais pas beaucoup plus…)
8 #
9
10 # decorator to make system call methods safe from EINTR
11 def systemcall(meth):
12 # have to import this way to avoid a circular import
13 from _socket import error as SocketError
14 def systemcallmeth(*args, **kwargs):
15 while 1:
16 try:
17 rv = meth(*args, **kwargs)
18 except Exception as why:
19 if type(why.args) == tuple and why.args[0] == 4:
20 continue
21 else:
22 raise
23 else:
24 break
25 return rv
26 return systemcallmeth