V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Buffer2Disk
V2EX  ›  程序员

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

  •  
  •   Buffer2Disk · 2019-06-25 09:56:10 +08:00 · 3893 次点击
    这是一个创建于 1983 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    1144.png

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

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

    1122.png
    12 条回复    2019-12-24 16:51:24 +08:00
    janxin
        1
    janxin  
       2019-06-25 10:24:26 +08:00
    net.ListenConfig 看一下?
    Buffer2Disk
        2
    Buffer2Disk  
    OP
       2019-06-25 10:41:23 +08:00
    @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  
       2019-06-25 11:30:12 +08:00
    @Buffer2Disk 我没试过设置 backlog,如果按照帖子里的说法,这样的话那就只能 syscall.Socket
    devforma
        4
    devforma  
       2019-06-25 12:11:03 +08:00
    @janxin 正解
    Buffer2Disk
        5
    Buffer2Disk  
    OP
       2019-06-25 13:06:20 +08:00
    @devforma 请问你有试过可以么?
    net.ListenConfig 确实可以设置 syscall.SOMAXCONN,但是你可以看下我上面发的 go 的源码里面,
    初始化 socket 的时候,除非异常的情况下才会使用 syscall.SOMAXCONN,否则都是读取系统的参数
    devforma
        6
    devforma  
       2019-06-25 14:18:41 +08:00
    @Buffer2Disk 确实,listenconfig 是在 listen 之前设置的,backlog 是在 listen 的时候设置的,从源码来看确实没法程序自定义
    devforma
        7
    devforma  
       2019-06-25 14:19:58 +08:00
    @devforma 用 syscall 自定义 socket 那一套还不如直接 C 来搞
    janxin
        8
    janxin  
       2019-06-25 14:42:25 +08:00
    要么改源码,只要可以添加一个暴露的方法提前定义一下 listenerBacklogCache 里的值就 OK 了

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

    参数可以参考: https://linux.die.net/man/2/listen
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1503 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:57 · PVG 07:57 · LAX 15:57 · JFK 18:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.