Coroutine\Socket->connect

最后更新于:2022-04-02 06:28:16

# Coroutine\\Socket->connect [TOC] 连接到目标服务器。调用此方法会发起异步的`connect`系统调用,并挂起当前协程,底层会监听可写,当连接完成或失败后,恢复该协程。 该方法适用于`Client`端,支持`IPv4`、`IPv6`、`UnixSocket`。 ~~~ function Coroutine\Socket->connect(string $host, int port = 0, double $timeout = -1) : bool; ~~~ ## 参数 * `$host`:目标服务器的地址,如`127.0.0.1`、`192.168.1.100`、`/tmp/php-fpm.sock`、`www.baidu.com`等,可以传入`IP`地址、`Unix Socket`路径或域名。若为域名,底层会自动进行异步的`DNS`解析,不会引起阻塞 * `$port`:目标服务器端口,`Socket`的`domain`为`AF_INET`、`AF_INET6`时必须设置端口 * `$timeout`:超时时间,底层会设置定时器,在规定的时间内未能建立连接,`connect`将返回`false` ## 返回值 * 超时或`connect`系统调用报错时返回`false`,可使用`errCode`属性获取错误码,其中超时错误码为`ETIMEDOUT` * 成功返回`true` ## 实例 ~~~ $socket = new Co\Socket(AF_INET, SOCK_STREAM, 0); go(function () use ($socket) { $retval = $socket->connect('localhost', 9601); while ($retval) { $n = $socket->send("hello"); var_dump($n); $data = $socket->recv(); var_dump($data); if (empty($data)) { $socket->close(); break; } co::sleep(1.0); } var_dump($retval, $socket->errCode); }); ~~~
';