Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
avocado
提交
db2067a1
A
avocado
项目概览
openeuler
/
avocado
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
avocado
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
db2067a1
编写于
12月 20, 2017
作者:
C
Cleber Rosa
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'random_free_port_v2'
Signed-off-by:
N
Cleber Rosa
<
crosa@redhat.com
>
上级
02d3d984
2be50b1d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
28 addition
and
11 deletion
+28
-11
avocado/utils/network.py
avocado/utils/network.py
+28
-11
未找到文件。
avocado/utils/network.py
浏览文件 @
db2067a1
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录