diff options
author | Ilya Maximets <i.maximets@samsung.com> | 2018-12-20 20:35:57 +0300 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2018-12-20 10:12:21 -0800 |
commit | 5078ae8bb9cbe5a3d9575be87475ecd0e63ce328 (patch) | |
tree | f42e586fadab4a21523892109b4d00b318900664 | |
parent | 441bf54a44a5e5c975fea9ae41f7f8b9da0b646a (diff) | |
download | openvswitch-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.py | 6 |
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) |