Coroutine\Socket->accept

接受客户端发起的连接。调用此方法会立即挂起当前协程,并加入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对象。可对其执行sendrecvclose等操作

实例

$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);
        }
    }
});