Coroutine\Socket->listen

监听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属性获取失败原因