V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Buffer2Disk
V2EX  ›  程序员

golang 监听端口的时候,有没有办法在代码里面去设置 backlog 等待队列的值

  •  
  •   Buffer2Disk · Jun 25, 2019 · 4590 views
    This topic created in 2498 days ago, the information mentioned may be changed or developed.

    如题,golang 监听端口的时候,有没有办法在代码里面去设置 backlog 的值呢?

    像 python 这种可以在监听端口的时候手动设置 backlog 的值 socket.listen(backlog)

    1144.png

    我查了下 go 的源码,在 Linux 的环境下,默认读取的是操作系统的 /proc/sys/net/core/somaxconn 值

    除非异常的情况下才会使用 syscall.SOMAXCONN

    1122.png
    12 replies    2019-12-24 16:51:24 +08:00
    janxin
        1
    janxin  
       Jun 25, 2019
    net.ListenConfig 看一下?
    Buffer2Disk
        2
    Buffer2Disk  
    OP
       Jun 25, 2019
    @janxin
    网上查了下,好像说在这里设置没用啊
    https://groups.google.com/forum/#!topic/golang-nuts/OfFAcAEuHuQ

    <img src="https://i.loli.net/2019/06/25/5d1189836d35499992.png" alt="1100.png" title="1100.png" />

    而且问了 golang 开发者,给的回复也是直接调用 syscall/#Listen 。。。。。
    janxin
        3
    janxin  
       Jun 25, 2019
    @Buffer2Disk 我没试过设置 backlog,如果按照帖子里的说法,这样的话那就只能 syscall.Socket
    devforma
        4
    devforma  
       Jun 25, 2019
    @janxin 正解
    Buffer2Disk
        5
    Buffer2Disk  
    OP
       Jun 25, 2019
    @devforma 请问你有试过可以么?
    net.ListenConfig 确实可以设置 syscall.SOMAXCONN,但是你可以看下我上面发的 go 的源码里面,
    初始化 socket 的时候,除非异常的情况下才会使用 syscall.SOMAXCONN,否则都是读取系统的参数
    devforma
        6
    devforma  
       Jun 25, 2019
    @Buffer2Disk 确实,listenconfig 是在 listen 之前设置的,backlog 是在 listen 的时候设置的,从源码来看确实没法程序自定义
    devforma
        7
    devforma  
       Jun 25, 2019
    @devforma 用 syscall 自定义 socket 那一套还不如直接 C 来搞
    janxin
        8
    janxin  
       Jun 25, 2019
    要么改源码,只要可以添加一个暴露的方法提前定义一下 listenerBacklogCache 里的值就 OK 了

    还是建议提个 issue 吧
    iceheart
        9
    iceheart  
       Jun 25, 2019 via Android
    改掉重新编译一下 golang 呗,编译不过几分钟的事儿
    Buffer2Disk
        10
    Buffer2Disk  
    OP
       Jun 26, 2019
    @janxin golang 的官方开发人员好像对这种 feature 并不太感冒啊,类似的 issue 我看 3 年前就有人提过了,你看去年 listenConfig 才被加进去,而且还不是个完整能自定义的玩意儿
    janxin
        11
    janxin  
       Jun 26, 2019
    @Buffer2Disk 一般都是需要描述清楚了之后因为现在是可以提 PR 的,提个 PR 就好了,小修改不影响 API 兼容性的比较容易进入 Cherry-Pick
    xvrzhao
        12
    xvrzhao  
       Dec 24, 2019
    直接系统调用吧,golang.org/x/sys/unix 包 Listen 函数,syscall 包官方已经废弃了。

    参数可以参考: https://linux.die.net/man/2/listen
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   958 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 20:54 · PVG 04:54 · LAX 13:54 · JFK 16:54
    ♥ Do have faith in what you're doing.