0)) { out(__FILE__, __LINE__, "ERROR: $errno - $errstr"); exit; } if (!stream_set_blocking($socket, FALSE)) { out(__FILE__, __LINE__, "ERROR: Cannot set non-blocking mode!"); exit; } out(__FILE__, __LINE__, "Negotiating with host ${ip} ..."); while (!feof($socket)) { //*DEBUG: */ out(__FILE__, __LINE__, "Sending ping..."); stream_socket_sendto($socket, 'PING'); //*DEBUG: */ out(__FILE__, __LINE__, "Reading reply..."); $read = trim(stream_socket_recvfrom($socket, 1500, 0, $peer)); if ($failed == constant('MAX_FAILURES')) { //*DEBUG: */ out(__FILE__, __LINE__, "Too many failures! (failed={$failed})"); break; } // END - if // Is the peer the same? if (empty($peer)) { out(__FILE__, __LINE__, "Connection lost? read={$read} (".strlen($read).")"); $failed++; continue; } elseif ($peer != "$ip:9060") { out(__FILE__, __LINE__, "Peer mismatch: {$ip}!={$peer}"); $failed++; continue; } if (empty($read)) { $failed++; //*DEBUG: */ out(__FILE__, __LINE__, "Empty line received. Is the server there?"); continue; } elseif ($read == 'INVALID') { $failed++; out(__FILE__, __LINE__, "Server has not accepted our message."); continue; } else { $failed = 0; //*DEBUG: */ out(__FILE__, __LINE__, "Response {$read} received."); } $rec = explode(':', $read); if (count($rec) < 2) { out(__FILE__, __LINE__, "Invalid packet {$read} received. count=".count($rec)); $invalid++; continue; } // END - if $time = trim($rec[0]); $right = explode('=', trim($rec[1])); $hash = trim($right[1]); $hasher = trim($right[0]); if (validate($time) != $hash) { out(__FILE__, __LINE__, "Invalid: ({$time}/{$hash}/{$hasher})"); $invalid++; continue; } // END - if if (!isset($data[$rec[0]])) { if (count($data) > 0) { print $data[$rec[0]-1]."\n"; $cnt++; if ($cnt > constant('ROUNDS')) break; } $data[$rec[0]] = 0; } $data[$rec[0]]++; // Sleep a little if (function_exists('time_nanosleep')) time_nanosleep(0, 500000); } // END - while array_shift($data); // Send BYE sendBye($socket); stream_socket_shutdown($socket, STREAM_SHUT_RDWR); $avg = 0; $min = 0; $max = 0; foreach ($data as $cnt) { if ($cnt > $max) { $max = $cnt; } if (($cnt < $min) || ($min == 0)) { $min = $cnt; } $avg += $cnt; } // END - foreach if (count($data) > 0) { $avg = round($avg / count($data)); } // END - if out(__FILE__, __LINE__, 'MIN/AVG/MAX=' . $min . '/' . $avg . '/' . $max . ''); out(__FILE__, __LINE__, 'INVALID=' . $invalid . ''); out(__FILE__, __LINE__, 'FAILED=' . $failed . ''); ?>