check port in use and add itself

This commit is contained in:
zhiiw 2022-12-06 20:40:05 +08:00
parent 23085ffef4
commit d2de601b7b
2 changed files with 28 additions and 17 deletions

View File

@ -11,7 +11,7 @@ from .render import DependencyRenderer, EntityRenderer, SpanRenderer
from ..tokens import Doc, Span
from ..errors import Errors, Warnings
from ..util import is_in_jupyter
from ..util import is_port_in_use
_html = {}
RENDER_WRAPPER = None
@ -99,9 +99,15 @@ def serve(
"""
from wsgiref import simple_server
if is_port_in_use(port):
port += 1
while is_port_in_use(port) and port < 65535:
port += 1
if is_in_jupyter():
warnings.warn(Warnings.W011)
render(docs, style=style, page=page, minify=minify, options=options, manual=manual)
httpd = simple_server.make_server(host, port, app)
print(f"\nUsing the '{style}' visualizer")
print(f"Serving on http://{host}:{port} ...\n")

View File

@ -31,7 +31,7 @@ import shlex
import inspect
import pkgutil
import logging
import socket
try:
import cupy.random
except ImportError:
@ -1736,3 +1736,8 @@ def all_equal(iterable):
(or if the input is an empty sequence), False otherwise."""
g = itertools.groupby(iterable)
return next(g, True) and not next(g, False)
def is_port_in_use(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port)) == 0