0)) { out(__FILE__, __LINE__, $errstr . ' (' . $errno . ')'); exit; } if (!stream_set_blocking($socket, FALSE)) { out(__FILE__, __LINE__, 'ERROR: Cannot set non-blocking mode!'); exit; } $pkt = ''; out(__FILE__, __LINE__, 'Waiting for connections...'); do { $pkt = trim(stream_socket_recvfrom($socket, 1500, 0, $peer)); if ($pkt == 'PING') { // Peer in list? if (!isset($connections[$peer])) { out(__FILE__, __LINE__, 'New peer ' . $peer . ' detected.'); $connections[$peer] = 1; } elseif ($connections[$peer] == 0) { out(__FILE__, __LINE__, 'Peer ' . $peer . ' has returned.'); $connections[$peer] = 1; } //out(__FILE__, __LINE__, 'Sending data to peer ' . $peer . '.'); stream_socket_sendto($socket, (time() . ':md5=' . md5(time())), 0, $peer); } elseif ($pkt == 'BYE') { // Peer in list? if (!isset($connections[$peer])) { out(__FILE__, __LINE__, 'Peer ' . $peer . ' is NOT in peer list.'); } else { out(__FILE__, __LINE__, 'Peer ' . $peer . ' is leaving us.'); stream_socket_sendto($socket, 'BYE', 0, $peer); $connections[$peer] = 0; } } elseif (!empty($peer)) { out(__FILE__, __LINE__, 'Invalid packet ' . $pkt . ' from peer ' . $peer . '.'); stream_socket_sendto($socket, 'INVALID', 0, $peer); } else { // Waiting for packages $pkt = ''; } $test = (round(date('s', time()) / 10)); if ($first != $test) { out(__FILE__, __LINE__, count($connections) . ' total connections so far.', true); $first = $test; } // Sleep a little if (function_exists('time_nanosleep')) time_nanosleep(0, 500000); } while ($pkt !== FALSE); ?>