是否有某种系统调用会返回端口是否可用?或者至少是一种不会使您的流程成为坏公民的传统方法?

目前我是这样做的:

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

糟糕!

最佳答案

我所知道的检查特定端口是否可用的最简单方法是尝试绑定(bind)到它或尝试连接到它(如果你想要 TCP)。如果绑定(bind)(或连接)成功,则它可用(正在使用)。

但是,如果您只是想要任何开放端口,则可以绑定(bind)到端口 0,操作系统会为您分配一个端口。

10-06 10:57
查看更多