Coroutine\Socket->sendAll

需要版本v4.3.0及以上

向对端发送数据, 与send方法不同的是, sendAll会尽可能完整地发送数据, 直到成功发送全部数据或遇到错误中止。

function Coroutine\Socket->sendAll(string $data, double $timeout = -1) : int | false;

参数

  • $data:要发送的数据内容,可以为文本或二进制数据
  • $timeout:设置超时时间,默认为-1表示永不超时

sendAll方法会立即执行多次send系统调用发送数据,当send系统调用返回错误EAGAIN时,底层将自动监听可写事件,并挂起当前协程,等待可写事件触发时,重新执行send系统调用发送数据, 直到数据发送完成或遇到错误, 唤醒对应协程。

返回值

  • 发送成功返回写入的字节数,请注意实际写入的数据仍可能小于$data参数的长度,应用层代码需要对比返回值与strlen($data)是否相等来判断是否发送完成
  • 发送失败返回false,并设置errCode属性