golang 监听端口的时候,有没有办法在代码里面去设置 backlog 等待队列的值 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Buffer2Disk
V2EX    程序员

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

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

    如题,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
    a href="/member/devforma" class="dark">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     Solana     1173 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:30 PVG 07:30 LAX 16:30 JFK 19:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86