summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@samsung.com>2018-12-20 20:35:57 +0300
committerBen Pfaff <blp@ovn.org>2018-12-20 10:12:21 -0800
commit5078ae8bb9cbe5a3d9575be87475ecd0e63ce328 (patch)
treef42e586fadab4a21523892109b4d00b318900664
parent441bf54a44a5e5c975fea9ae41f7f8b9da0b646a (diff)
downloadopenvswitch-5078ae8bb9cbe5a3d9575be87475ecd0e63ce328.tar.gz
python: Catch setsockopt exceptions for TCP stream.
'sock.setsockopt' could throw exceptions. For example, if non-blocking connection failed before the call: Traceback (most recent call last): File "../.././test-ovsdb.py", line 896, in <module> main(sys.argv) File "../.././test-ovsdb.py", line 891, in main func(*args) File "../.././test-ovsdb.py", line 604, in do_idl ovs.stream.Stream.open(r)) File "/root/git_/ovs/python/ovs/stream.py", line 190, in open error, sock = cls._open(suffix, dscp) File "/root/git_/ovs/python/ovs/stream.py", line 744, in _open sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) File "/usr/local/lib/python2.7/socket.py", line 228, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 54] Connection reset by peer This fixes tests on FreeBSD. Signed-off-by: Ilya Maximets <i.maximets@samsung.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
-rw-r--r--python/ovs/stream.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/python/ovs/stream.py b/python/ovs/stream.py
index fb083eeeb..d8b285f1a 100644
--- a/python/ovs/stream.py
+++ b/python/ovs/stream.py
@@ -361,6 +361,10 @@ class TCPStream(Stream):
error, sock = ovs.socket_util.inet_open_active(socket.SOCK_STREAM,
suffix, 0, dscp)
if not error:
- sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+ try:
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+ except socket.error as e:
+ sock.close()
+ return ovs.socket_util.get_exception_errno(e), None
return error, sock
Stream.register_method("tcp", TCPStream)