Coroutine\Socket->listen
最后更新于:2022-04-02 06:28:12
# Coroutine\\Socket->listen
[TOC]
监听`Socket`。
~~~
function Coroutine\Socket->listen(int $backlog = 0) : bool;
~~~
* 此方法没有`IO`操作,不会引起协程切换
## 参数
* `$backlog`:监听队列的长度,默认为`0`,系统底层使用`epoll`实现了异步`IO`,不存在阻塞,因此`backlog`的重要程度并不高
> 注意:如果应用中存在阻塞或耗时逻辑,`accept`接受连接不及时,新创建的连接就会堆积在`backlog`监听队列中,如超出`backlog`长度,服务就会拒绝新的连接进入
## 内核参数
`backlog`的最大值受限于内核参数`net.core.somaxconn`, 而Linux中可以工具`sysctl`来动态调整所有的kernel参数。所谓动态调整就是内核参数值修改后即时生效。但是这个生效仅限于`OS`层面,必须重启应用才能真正生效, 命令`sysctl -a`会显示所有的内核参数及值。
~~~
sysctl -w net.core.somaxconn=2048
~~~
以上命令将内核参数`net.core.somaxconn`的值改成了`2048`。这样的改动虽然可以立即生效,但是重启机器后会恢复默认值。为了永久保留改动,需要修改`/etc/sysctl.conf`,增加`net.core.somaxconn=2048`然后执行命令`sysctl -p`生效。
## 返回值
* 监听成功返回`true`
* 监听失败返回`false`,请检查`errCode`属性获取失败原因
';