未验证 提交 db2067a1 编写于 作者: C Cleber Rosa

Merge branch 'random_free_port_v2'

Signed-off-by: NCleber Rosa <crosa@redhat.com>
......@@ -17,6 +17,9 @@ Module with network related utility functions
"""
import socket
import random
from six.moves import xrange as range
from .data_structures import Borg
......@@ -26,6 +29,7 @@ def is_port_free(port, address):
Return True if the given port is available for use.
:param port: Port number
:param address: Socket address to bind or connect
"""
try:
s = socket.socket()
......@@ -44,34 +48,47 @@ def is_port_free(port, address):
return free
def find_free_port(start_port, end_port, address="localhost"):
def find_free_port(start_port, end_port, address="localhost", sequent=True):
"""
Return a host free port in the range [start_port, end_port].
:param start_port: First port that will be checked.
:param end_port: Port immediately after the last one that will be checked.
:param start_port: header of candidate port range
:param end_port: ender of candidate port range
:param sequent: Find port sequently, random order if it's False
:param address: Socket address to bind or connect
"""
for i in range(start_port, end_port):
port_range = range(start_port, end_port)
if not sequent:
port_range = list(port_range)
random.shuffle(port_range)
for i in port_range:
if is_port_free(i, address):
return i
return None
def find_free_ports(start_port, end_port, count, address="localhost"):
def find_free_ports(start_port, end_port, count, address="localhost", sequent=True):
"""
Return count of host free ports in the range [start_port, end_port].
:param start_port: header of candidate port range
:param end_port: ender of candidate port range
:param count: Initial number of ports known to be free in the range.
:param start_port: First port that will be checked.
:param end_port: Port immediately after the last one that will be checked.
:param address: Socket address to bind or connect
:param sequent: Find port sequently, random order if it's False
"""
ports = []
i = start_port
while i < end_port and count > 0:
port_range = range(start_port, end_port)
if not sequent:
port_range = list(port_range)
random.shuffle(port_range)
for i in port_range:
if is_port_free(i, address):
ports.append(i)
count -= 1
i += 1
if len(ports) >= count:
break
return ports
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册