2 from contextlib import contextmanager
4 from eventlet.support import greenlets, six
8 """ Get the error code out of socket.error objects.
9 socket.error in <2.5 does not have errno attribute
10 socket.error in 3.x does not allow indexing access
11 e.args[0] works for all.
12 There are cases when args[0] is not errno.
13 i.e. http://bugs.python.org/issue6471
14 Maybe there are cases when errno is set, but it is not the first argument?
18 if exc.errno is not None:
20 except AttributeError:
28 if sys.version_info[0] < 3 and not greenlets.preserves_excinfo:
29 from sys import exc_clear as clear_sys_exc_info
31 def clear_sys_exc_info():
33 Exception information is not visible outside of except statements.
34 sys.exc_clear became obsolete and removed."""
37 if sys.version_info[0] < 3:
38 def bytes_to_str(b, encoding='ascii'):
41 def bytes_to_str(b, encoding='ascii'):
42 return b.decode(encoding)
44 PY33 = sys.version_info[:2] == (3, 3)
48 stream = six.StringIO()