diff -r fb48ba17ae3e -r 9966d35a63df pvl/socket.py --- 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