[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] O_REUSEADDR is not enough to ensure we don't get address in use errors when
# HG changeset patch # User shand@xxxxxxxxxxxxxxxxxxxxxxxxxxx # Node ID 36f8c5900e8646b0465d92d602bd07f3d3b5a966 # Parent 7985a4d8bae9e8f618215d8da427320a8943b507 O_REUSEADDR is not enough to ensure we don't get address in use errors when xend dies from a signal. We implement a 30 second time to ensure we don't fail if we don't have to. Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx> diff -r 7985a4d8bae9 -r 36f8c5900e86 tools/python/xen/web/tcp.py --- a/tools/python/xen/web/tcp.py Thu Sep 15 01:45:51 2005 +++ b/tools/python/xen/web/tcp.py Thu Sep 15 01:46:40 2005 @@ -18,6 +18,7 @@ import sys import socket import types +import time from connection import * from protocol import * @@ -35,8 +36,25 @@ def createSocket(self): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - addr = (self.interface, self.port) - sock.bind(addr) + + # SO_REUSEADDR does not always ensure that we do not get an address + # in use error when restarted quickly + # we implement a timeout to try and avoid failing unnecessarily + + timeout = time.time() + 30 + again = True + while again and time.time() < timeout: + again = False + try: + sock.bind((self.interface, self.port)) + except socket.error, (errno, strerrno): + if errno == 98: + again = True + else: + raise socket.error(errno, strerrno) + if again: + raise socket.error(98, "address in use") + return sock def acceptConnection(self, sock, protocol, addr): _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |