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);
});
~~~
';