是否有其他方法可以找到未使用的端口号

德氧

我需要运行一个用 Tcl 编写的 web 服务器,它默认依赖一个硬编码的端口号来监听,虽然我担心如果该端口已经被使用,它可能会导致它失败。它确实允许您将端口号作为参数传递,但如果您还不确定它是一个未使用的端口,则可能会导致同样的问题。

我设计了以下方法来获得一个似乎可以工作的未使用端口(见最后一行的旁边),并且失败的机会(即端口在中间时间被使用)似乎比仅仅依赖要渺茫得多一个随机选择的端口号。尽管如此,我并不完全满意,并且想知道还有哪些其他方法可以实现这一目标。

proc noop {chan addr port} {
}
set chan [socket -server noop 0]
set sockname [chan configure $chan -sockname]
chan close $chan
set port [lindex $sockname end]         ;# e.g. 51922
set chan2 [socket -server noop $port]   ;# test re-usability of port
chan close $chan2
唐纳德研究员

实际上,您可以做的事情并不多,因为理论上当您没有自己打开套接字时,可以随时打开套接字,但要保持在临时端口范围之外(即,从 32768 (0x8000) 到 65535 ( 0xFFFF)) 会有所帮助,因为这样您就不会遇到 TCP 连接客户端自动分配端口的问题。

以普通用户身份运行的本地网络服务器的常用端口号为 8000 和 8080(HTTPS 为 8443),但实际端口号通常并不重要。关键是您通常将这些端口作为机器整体计划的一部分进行规划;您可以有一个很好的想法,因为您可以控制系统,因此不会有任何干扰。VM 使这一切变得相当简单(并且在完全部署方案中,您使用 apache 或 nginx 代理使所有内容都出现在系统保护的端口 80 和 443 后面)。

或者,您可以让真实系统打开伪端口 0(如在您的脚本中),然后在继续为该端口提供真实服务之前报告它实际分配的端口。这是对您现在所做工作的一个微不足道的扩展……在一个层面上,但要求您的整个系统设置为非常量端口号。这可能很困难,而且通常只对测试框架有用(Tcl 自己的测试套件大量使用这个技巧)或者底层协议从头开始设计以这种方式工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

URL是否可以包含冒号来表示端口号以外的其他值

在使用需要自定义端口号的ssh登录时,有什么方法可以隐藏端口号

在Springboot中,除了在application.properties中设置端口外,是否还有其他方法可以更改端口?

在 Java 中,是否可以找出 UNIX 系统中已知 PID 使用的端口号?

是否有其他方法可以移动、更改和关联其他目录?

还有没有其他方法可以检查args [1]是否存在+可以在days_array中找到而不是尝试try除外?

除了DAvg之外,还有其他方法可以找到平均值吗?

对于HSSF内置颜色,是否还有其他方法可以避免Apache POI中的过时使用?

Python 2.7.10:除了使用 len() 之外,还有其他方法可以检查输入是否为空

如何找到默认的JMX端口号?

没有端口号的PHP artisan使用域

SS和其他网络程序如何从端口号中查找端口名?

是否有其他方法可以在 Pandas 中创建从所有其他行派生的逐行数据?

是否有其他方法可以创建空数组,然后将其填充到Python中?

是否有其他方法可以根据需要填充此数组

除了Azure门户之外,是否有其他方法可以查看Application Insights日志?

是否有其他方法可以将 DI 容器引用存储在 Application 变量中?

是否有其他方法可以更改脚手架抽屉的宽度?

除了数组的一个成员外,是否有其他方法可以执行操作?

是否有应用程序或某种其他方法可以在Windows中更新Chromium?

是否有其他方法可以使此代码更短?

是否有其他方法可以自动调整 jupyter 列表的长度?

是否可以使用 mutate_at 或使用其他方法使此代码更简洁?

是否可以从其他方法访问变量?

有没有其他方法可以在 cshtml 中使用 Session 变量?

有没有其他方法可以使用findorfail()更新存储过程?

gRPC 端口号有规定吗?

提供MySQL或任何其他数据库中的端口号

如何在SQL Management Studio中指定其他端口号?