public function onRead($socket, Listener $listener) { /** @var \Aurora\Client $client */ $client = $listener->getArgument(); $segment = socket_read($socket, $this->bind->getConfig()->socket_read_buffer_size); if (false === $segment) { $no = socket_last_error($socket); $message = $no != 0 ? socket_strerror($no) : ''; $listener->delete(); $client->close(); throw new Exception($message, $no); } elseif ("" === $segment) { $listener->delete(); $client->close(); } else { if (!$this->bind->getTimestamp()->has(ServerTimestampType::SocketFirstRead)) { $this->bind->getTimestamp()->mark(ServerTimestampType::SocketFirstRead); } $this->bind->getTimestamp()->mark(ServerTimestampType::SocketLastRead); $client->getPipeline()->append($segment); } }
public function onSend($socket, Listener $listener) { socket_write($socket, $this->buffer); $this->clear(); $listener->delete(); $this->event->free($listener->getName(), $listener, true); }