When OVSDB server is aborted,
the SSL send function will throw SSL.SysCallError exception,
which we need to catch and return it's -errno.

While SSL.WantWriteError exception needs to return -EAGAIN
based on its parent class, not EAGAIN

Signed-off-by: Guoshuai Li <[email protected]>
---
 python/ovs/stream.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/python/ovs/stream.py b/python/ovs/stream.py
index 4fd68f9..58c4925 100644
--- a/python/ovs/stream.py
+++ b/python/ovs/stream.py
@@ -809,7 +809,9 @@ class SSLStream(Stream):
                 buf = buf.encode('utf-8')
             return super(SSLStream, self).send(buf)
         except SSL.WantWriteError:
-            return errno.EAGAIN
+            return -errno.EAGAIN
+        except SSL.SysCallError as e:
+            return -ovs.socket_util.get_exception_errno(e)
 
 
 if SSL:
-- 
2.10.1.windows.1

This is the exception call stack:
neutron-server: File "/usr/lib/python2.7/site-packages/ovs/jsonrpc.py", line 
243, in send
neutron-server: self.run()
neutron-server: File "/usr/lib/python2.7/site-packages/ovs/jsonrpc.py", line 
202, in run
neutron-server: retval = self.stream.send(self.output)
neutron-server: File "/usr/lib/python2.7/site-packages/ovs/stream.py", line 
488, in send
neutron-server: return super(SSLStream, self).send(buf)
neutron-server: File "/usr/lib/python2.7/site-packages/ovs/stream.py", line 
241, in send
neutron-server: return self.socket.send(buf)
neutron-server: File "/usr/lib/python2.7/site-packages/OpenSSL/SSL.py", line 
1271, in send
neutron-server: self._raise_ssl_error(self._ssl, result)
neutron-server: File "/usr/lib/python2.7/site-packages/OpenSSL/SSL.py", line 
1178, in _raise_ssl_error
neutron-server: raise SysCallError(errno, errorcode.get(errno))
neutron-server: SysCallError: (104, 'ECONNRESET')
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to