/** * Send data via UDP * * @param ProfilerData $data */ public function send(ProfilerData $data) { list($host, $port) = $this->getEndpoint($data->getEngine()); if (!$host || !$port) { return; } $profile = $data->getProfile(); $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $plength = 0; $packet = ""; foreach ($data->getEntries() as $name => $pfdata) { foreach (array('cpu', 'cpu_sq', 'real', 'real_sq') as $key) { if (!isset($pfdata[$key])) { $pfdata[$key] = -1; } } $pfline = sprintf("%s %s %d %f %f %f %f %s\n", $profile, "-", $pfdata['count'], $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $name); $length = strlen($pfline); if ($length + $plength > self::LESS_THAN_MTU) { socket_sendto($sock, $packet, $plength, 0, $host, $port); $packet = ""; $plength = 0; } $packet .= $pfline; $plength += $length; } socket_sendto($sock, $packet, $plength, 0x100, $host, $port); }