Есть ли какой-нибудь системный вызов, который вернет, доступен ли порт? Или, по крайней мере, обычным способом сделать это, который не делает ваш процесс плохим гражданином?
На данный момент я так делаю:
def find_open_port(min_port, max_port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
for port in range(min_port, max_port):
if port > max_port:
raise IOError('Could not find a free port between {0} and {1}'.format(min_port, max_port))
try:
s.bind(('localhost', port))
return port
except socket.error as error:
if error.strerror == 'Address already in use':
continue
else:
raise error
Тьфу!