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被排除,但实际上它是一个有效的端口号。

`
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}} 的 Javadoc)

{quote}
IllegalArgumentException - 如果端口号参数超出了指定的有效端口值范围,该范围介于0到65535之间(包括)。
{quote}

补丁文件:port-65535-obo-v2.patch

预筛选: Alex Miller

封闭的备注:修复在1.11.0-alpha2

3 个答案

0投票

评论者:alexmiller

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

在此处还有一个更好(可能更好)的解决方案:(<= 0 port 65535)- 这更接近于检查。

0投票

评论由:kvakil发布

是的,就在今天上午。

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

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