2024州Clojure调查中分享你的想法!

欢迎!请查看关于页面以了解更多关于此如何工作。

0
REPL
已关闭

以下代码用于在{{src/clj/clojure/core/server.clj}}中验证端口号是否有效

(defn- validate-opts "验证服务器配置选项" [{:keys [name port accept] :as opts}] (doseq [prop [:name :port :accept]] (required opts prop)) (when (or (not (integer? port)) (not (< -1 port 65535))) (throw (ex-info (str "无效套接字服务器端口: " port) opts))))

但这有一点不正确,因为排除了一部分65535端口,但实际上65535是一个有效的端口。

`
user=> (defn is-invalid-port [port] (or (not (integer? port)) (not (< -1 port 65535))))

'user/is-invalid-port

user=> (is-invalid-port 65534)
false
user=> (is-invalid-port 65535) ; 应该是false!
true
user=> (is-invalid-port 65536)
true
`

这得到了(链接:https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#ServerSocket(int) 文本:{{ServerSocket}}'的说明书)的支持。

{quote}
IllegalArgumentException - 如果端口号参数超出了指定范围内有效的端口号范围,范围是0到65535,包括65535。
{quote}

修复: port-65535-obo-v2.patch

预审: Alex Miller

注关闭: 已修复在1.11.0-alpha2中

3 答案

0

评论者:alexmiller

Hi Keyhan,你签署了Clojure贡献者协议吗?https://clojure.org/community/contributing。如果没有,请这样做。

这里还有另一种可能更好的解决方案,即(<= 0 port 65535) - 这更接近于检查。

0
by

发表评论的人:kvakil

是的,就在今天早些时候。

我同意这样看起来更好。当前的补丁是 {{port-65535-obo-v2.patch}}。

0
by
参考资料: https://clojure.atlassian.net/browse/CLJ-2387(由 kvakil 报告)
...