Ensure the fd will be valid by the time we listen

This commit is contained in:
Jean-Paul Calderone 2018-05-23 10:50:54 -04:00
parent 62836b6858
commit be6e458770

View File

@ -322,11 +322,17 @@ def foolscapEndpointForPortNumber(portnum):
from socket import socket, AF_INET
from twisted.internet.endpoints import AdoptedStreamServerEndpoint
s = socket()
s.setblocking(False)
s.bind(('', 0))
portnum = s.getsockname()[1]
s.listen(3)
return (portnum, AdoptedStreamServerEndpoint(reactor, s.fileno(), AF_INET))
try:
s.setblocking(False)
s.bind(('', 0))
portnum = s.getsockname()[1]
s.listen(3)
return (
portnum,
AdoptedStreamServerEndpoint(reactor, os.dup(s.fileno()), AF_INET),
)
finally:
s.close()
else:
# Get a random port number and fall through.
portnum = iputil.allocate_tcp_port()