You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OCaml基于Janestreet Async的Tcp服务器仅监听本地如何配置为监听全地址

问题根因

你使用的Async版本默认开启了listen_on_localhost全局配置,该配置优先级高于of_port方法的默认监听逻辑,会强制所有端口绑定到127.0.0.1回环地址,因此即使of_port文档描述为监听所有地址,实际也只会监听本地请求。

解决方法
  • 方法1:显式指定监听所有网卡(永久生效,不受全局配置影响,推荐)
    替换原有Tcp.Where_to_listen.of_port 8886的写法,显式声明绑定到所有地址,修改后代码如下:
Tcp.Server.create 
  ~on_handler_error:`Raise
  (Tcp.Where_to_listen.bind_to All_addresses (On_port 8886))
  (fun _addr r w -> perform_tasks w r)
  • 方法2:修改启动环境变量(临时测试用,无需修改代码)
    启动服务前执行以下命令,覆盖默认的仅本地监听配置:
ASYNC_CONFIG='listen_on_localhost=false' ./你的服务可执行文件名
效果验证

服务启动后执行ss -tlnp | grep 8886命令查看监听状态,如果输出的监听地址为0.0.0.0:8886(IPv4所有地址)或:::8886(IPv6所有地址),即代表配置生效,外部网络可正常访问该服务端口。


内容的提问来源于stack exchange,提问作者Nadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:36:02