Commit 2be2b6f2 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

GvR provided solution to the socket rebinding timeout problem.

M PyShell.py
M rpc.py
M run.py
parent dfbc1fdd
...@@ -198,16 +198,14 @@ class ModifiedInterpreter(InteractiveInterpreter): ...@@ -198,16 +198,14 @@ class ModifiedInterpreter(InteractiveInterpreter):
args = [sys.executable] + w + ["-c", "__import__('run').main()", args = [sys.executable] + w + ["-c", "__import__('run').main()",
str(port)] str(port)]
self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args) self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
# Idle starts listening for connection on localhost, retry since # Idle starts listening for connection on localhost
# Idle may be restarted before port is available for rebinding for i in range(6):
# XXX 25 July 2002 KBK Find out what is causing the delayed release!
for i in range(12):
time.sleep(i) time.sleep(i)
try: try:
self.rpcclt = rpc.RPCClient(addr) self.rpcclt = rpc.RPCClient(addr)
break break
except socket.error, err: except socket.error, err:
if i < 5: if i < 3:
print>>sys.__stderr__, ". ", print>>sys.__stderr__, ". ",
else: else:
print>>sys.__stderr__,"\nIdle socket error: " + err[1]\ print>>sys.__stderr__,"\nIdle socket error: " + err[1]\
......
...@@ -403,6 +403,7 @@ class RPCClient(SocketIO): ...@@ -403,6 +403,7 @@ class RPCClient(SocketIO):
def __init__(self, address, family=socket.AF_INET, type=socket.SOCK_STREAM): def __init__(self, address, family=socket.AF_INET, type=socket.SOCK_STREAM):
self.sock = socket.socket(family, type) self.sock = socket.socket(family, type)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(address) self.sock.bind(address)
self.sock.listen(1) self.sock.listen(1)
......
...@@ -26,13 +26,13 @@ def main(): ...@@ -26,13 +26,13 @@ def main():
port = int(sys.argv[1]) port = int(sys.argv[1])
sys.argv[:] = [""] sys.argv[:] = [""]
addr = ("localhost", port) addr = ("localhost", port)
for i in range(12): for i in range(6):
time.sleep(i) time.sleep(i)
try: try:
svr = rpc.RPCServer(addr, MyHandler) svr = rpc.RPCServer(addr, MyHandler)
break break
except socket.error, err: except socket.error, err:
if i < 5: if i < 3:
print>>sys.__stderr__, ".. ", print>>sys.__stderr__, ".. ",
else: else:
print>>sys.__stderr__,"\nPython subprocess socket error: "\ print>>sys.__stderr__,"\nPython subprocess socket error: "\
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment