如题,golang 监听端口的时候,有没有办法在代码里面去设置 backlog 的值呢?
像 python 这种可以在监听端口的时候手动设置 backlog 的值 socket.listen(backlog)
我查了下 go 的源码,在 Linux 的环境下,默认读取的是操作系统的 /proc/sys/net/core/somaxconn 值
除非异常的情况下才会使用 syscall.SOMAXCONN
1
janxin 2019-06-25 10:24:26 +08:00
net.ListenConfig 看一下?
|
2
Buffer2Disk OP @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 。。。。。 |
3
janxin 2019-06-25 11:30:12 +08:00
@Buffer2Disk 我没试过设置 backlog,如果按照帖子里的说法,这样的话那就只能 syscall.Socket
|
5
Buffer2Disk OP @devforma 请问你有试过可以么?
net.ListenConfig 确实可以设置 syscall.SOMAXCONN,但是你可以看下我上面发的 go 的源码里面, 初始化 socket 的时候,除非异常的情况下才会使用 syscall.SOMAXCONN,否则都是读取系统的参数 |
6
devforma 2019-06-25 14:18:41 +08:00
@Buffer2Disk 确实,listenconfig 是在 listen 之前设置的,backlog 是在 listen 的时候设置的,从源码来看确实没法程序自定义
|
8
janxin 2019-06-25 14:42:25 +08:00
要么改源码,只要可以添加一个暴露的方法提前定义一下 listenerBacklogCache 里的值就 OK 了
还是建议提个 issue 吧 |
9
iceheart 2019-06-25 20:25:37 +08:00 via Android
改掉重新编译一下 golang 呗,编译不过几分钟的事儿
|
10
Buffer2Disk OP @janxin golang 的官方开发人员好像对这种 feature 并不太感冒啊,类似的 issue 我看 3 年前就有人提过了,你看去年 listenConfig 才被加进去,而且还不是个完整能自定义的玩意儿
|
11
janxin 2019-06-26 09:43:20 +08:00
@Buffer2Disk 一般都是需要描述清楚了之后因为现在是可以提 PR 的,提个 PR 就好了,小修改不影响 API 兼容性的比较容易进入 Cherry-Pick
|
12
xvrzhao 2019-12-24 16:51:24 +08:00
直接系统调用吧,golang.org/x/sys/unix 包 Listen 函数,syscall 包官方已经废弃了。
参数可以参考: https://linux.die.net/man/2/listen |