Coroutine\Socket->accept
最后更新于:2022-04-02 06:28:14
# Coroutine\\Socket->accept
[TOC]
接受客户端发起的连接。调用此方法会立即挂起当前协程,并加入`EventLoop`监听可读事件,当`Socket`可读有到来的连接时自动唤醒该协程。并返回对应客户端连接的`Socket`对象。
该方法必须在使用`listen`方法后使用,适用于`Server`端。
~~~
function Coroutine\Socket->accept(double $timeout = -1) : Coroutine\Socket | false;
~~~
## 参数
* `$timeout`:设置超时,默认为`-1`表示永不超时。设置超时参数后,底层会设置定时器,在规定的时间没有客户端连接到来,`accept`方法将返回`false`
## 返回值
* 超时或`accept`系统调用报错时返回`false`,可使用`errCode`属性获取错误码,其中超时错误码为`ETIMEDOUT`
* 成功返回客户端连接的`socket`,类型同样为`Swoole\Coroutine\Socket`对象。可对其执行`send`、`recv`、`close`等操作
## 实例
~~~
$socket = new Co\Socket(AF_INET, SOCK_STREAM, 0);
$socket->bind('127.0.0.1', 9601);
$socket->listen(128);
go(function () use ($socket) {
while(true) {
echo "Accept: \n";
$client = $socket->accept();
if ($client === false) {
var_dump($socket->errCode);
} else {
var_dump($client);
}
}
});
~~~
';