--- a/pvl/socket.py Sun Jan 20 15:37:59 2013 +0200
+++ b/pvl/socket.py Sun Jan 20 15:39:44 2013 +0200
@@ -125,7 +125,13 @@
return socket.getnameinfo(sockaddr, flags)
def socket_str (sock) :
- peer = sock.getpeername()
+ # get connected peer
+ try :
+ peer = sock.getpeername()
+
+ except socket.error as ex :
+ # fails if socket is not connected XXX: even after EOF on read..?
+ return str(ex)
# lookup scheme
for scheme, (family, socktype) in URL :
@@ -145,10 +151,13 @@
else :
return "{host}:{port}".format(host=host, port=port)
-# XXX: SIGPIPE
def nonblocking (call, *args, **kwargs) :
"""
Call the given function, which read/writes on a nonblocking file, and return None if it would have blocked.
+
+ Raises EOFError on SIGPIPE/EPIPE.
+
+ # XXX: does python handle SIGPIPE for us?
"""
try :
@@ -159,6 +168,10 @@
if ex.errno == errno.EAGAIN or ex.errno == errno.EWOULDBLOCK:
# empty
return None
+
+ elif ex.errno == errno.EPIPE :
+ # XXX: write-eof?
+ raise EOFError()
else :
raise