2021年1月4日月曜日

python で空きポートを探す

localhostで接続待ちできる空いているポートを探す。 要するに、serverportを作ってみて成功したらクローズして返すだけ。
import socketserver

def find_vacant_port(port_base, trial_count):
    """find vacant port for forwarding, 
    starts with port_base and test at most trial_count ports.
    if it cannot find, it raise OSError"""
    for i in range(trial_count):
        try:
            ss = socketserver.TCPServer(('127.0.0.1', port_base + i), None)
            # found one
            ss.server_close()
            return port_base + i
        except OSError:
            pass
    raise OSError("cannot find vacant port")