mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
socket-util: Avoid using SO_ERROR.
ESX doesn't implement it, and there's another approach that should work everywhere, so drop back to that. Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
@@ -78,8 +78,22 @@ def make_unix_socket(style, nonblock, bind_path, connect_path):
|
||||
def check_connection_completion(sock):
|
||||
p = ovs.poller.SelectPoll()
|
||||
p.register(sock, ovs.poller.POLLOUT)
|
||||
if len(p.poll(0)) == 1:
|
||||
return get_socket_error(sock)
|
||||
pfds = p.poll(0)
|
||||
if len(pfds) == 1:
|
||||
revents = pfds[0][1]
|
||||
if revents & ovs.poller.POLLERR:
|
||||
try:
|
||||
# The following should raise an exception.
|
||||
socket.send("\0", socket.MSG_DONTWAIT)
|
||||
|
||||
# (Here's where we end up if it didn't.)
|
||||
# XXX rate-limit
|
||||
vlog.err("poll return POLLERR but send succeeded")
|
||||
return errno.EPROTO
|
||||
except socket.error, e:
|
||||
return get_exception_errno(e)
|
||||
else:
|
||||
return 0
|
||||
else:
|
||||
return errno.EAGAIN
|
||||
|
||||
|
Reference in New Issue
Block a user