Browse Source

miner.php allow sending the muticast message multiple times

nfactor-troky
Kano 11 years ago
parent
commit
e2829f0c8e
  1. 22
      API-README
  2. 93
      miner.php

22
API-README

@ -1247,6 +1247,28 @@ N.B. the accuracy of the timing used to wait for the replies is @@ -1247,6 +1247,28 @@ N.B. the accuracy of the timing used to wait for the replies is
---------
Default:
$mcastretries = 0;
Set $mcastretries to the number of times to retry the multicast
If $mcastexpect is 0, this is simply the number of extra times
that it will send the multicast request
N.B. cgminer doesn't listen for multicast requests for 1000ms after
each one it hears
If $mcastexpect is > 0, it will stop looking for replies once it
has found at least $mcastexpect rigs, but it only checks this rig
limit each time it reaches the $mcasttimeout limit, thus it can find
more than $mcastexpect rigs if more exist
It will send the multicast message up to $mcastretries extra times or
until it has found at least $mcastexpect rigs
However, when using $mcastretries, it is possible for it to sometimes
ignore some rigs on the network if $mcastexpect is less than the
number of rigs on the network and some rigs are too slow to reply
---------
Default:
$allowgen = false;

93
miner.php

@ -3,7 +3,7 @@ session_start(); @@ -3,7 +3,7 @@ session_start();
#
global $doctype, $title, $miner, $port, $readonly, $notify, $rigs;
global $mcast, $mcastexpect, $mcastaddr, $mcastport, $mcastcode;
global $mcastlistport, $mcasttimeout, $allowgen;
global $mcastlistport, $mcasttimeout, $mcastretries, $allowgen;
global $rigipsecurity, $rigtotals, $forcerigtotals;
global $socksndtimeoutsec, $sockrcvtimeoutsec;
global $checklastshare, $poolinputs, $hidefields;
@ -70,6 +70,9 @@ $mcastlistport = 4027; @@ -70,6 +70,9 @@ $mcastlistport = 4027;
# to wait for replies to the Multicast message
$mcasttimeout = 1.5;
#
# Set $mcastretries to the number of times to retry the multicast
$mcastretries = 0;
#
# Set $allowgen to true to allow customsummarypages to use 'gen'
# false means ignore any 'gen' options
$allowgen = false;
@ -375,8 +378,8 @@ $error = null; @@ -375,8 +378,8 @@ $error = null;
#
function getrigs()
{
global $rigs, $mcastaddr, $mcastport, $mcastcode;
global $mcastlistport, $mcasttimeout, $error;
global $rigs, $mcastexpect, $mcastaddr, $mcastport, $mcastcode;
global $mcastlistport, $mcasttimeout, $mcastretries, $error;
$listname = "0.0.0.0";
@ -414,56 +417,66 @@ function getrigs() @@ -414,56 +417,66 @@ function getrigs()
return;
}
$mcast_soc = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($mcast_soc === false || $mcast_soc == null)
$retries = $mcastretries;
$doretry = ($retries > 0);
do
{
$msg = "ERR: mcast send socket create(UDP) failed";
if ($rigipsecurity === false)
$mcast_soc = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($mcast_soc === false || $mcast_soc == null)
{
$error = socket_strerror(socket_last_error());
$error = "$msg '$error'\n";
}
else
$error = "$msg\n";
$msg = "ERR: mcast send socket create(UDP) failed";
if ($rigipsecurity === false)
{
$error = socket_strerror(socket_last_error());
$error = "$msg '$error'\n";
}
else
$error = "$msg\n";
socket_close($rep_soc);
return;
}
socket_close($rep_soc);
return;
}
$buf = "cgminer-$mcastcode-$mcastlistport";
socket_sendto($mcast_soc, $buf, strlen($buf), 0, $mcastaddr, $mcastport);
socket_close($mcast_soc);
$buf = "cgminer-$mcastcode-$mcastlistport";
socket_sendto($mcast_soc, $buf, strlen($buf), 0, $mcastaddr, $mcastport);
socket_close($mcast_soc);
$stt = microtime(true);
while (true)
{
$got = @socket_recvfrom($rep_soc, $buf, 32, MSG_DONTWAIT, $ip, $p);
if ($got !== false && $got > 0)
$stt = microtime(true);
while (true)
{
$ans = explode('-', $buf, 4);
if (count($ans) >= 3 && $ans[0] == 'cgm' && $ans[1] == 'FTW')
$got = @socket_recvfrom($rep_soc, $buf, 32, MSG_DONTWAIT, $ip, $p);
if ($got !== false && $got > 0)
{
$rp = intval($ans[2]);
$ans = explode('-', $buf, 4);
if (count($ans) >= 3 && $ans[0] == 'cgm' && $ans[1] == 'FTW')
{
$rp = intval($ans[2]);
if (count($ans) > 3)
$mdes = str_replace("\0", '', $ans[3]);
else
$mdes = '';
if (count($ans) > 3)
$mdes = str_replace("\0", '', $ans[3]);
else
$mdes = '';
if (strlen($mdes) > 0)
$rig = "$ip:$rp:$mdes";
else
$rig = "$ip:$rp";
if (strlen($mdes) > 0)
$rig = "$ip:$rp:$mdes";
else
$rig = "$ip:$rp";
if (!in_array($rig, $rigs))
$rigs[] = $rig;
if (!in_array($rig, $rigs))
$rigs[] = $rig;
}
}
if ((microtime(true) - $stt) >= $mcasttimeout)
break;
usleep(100000);
}
if ((microtime(true) - $stt) >= $mcasttimeout)
break;
usleep(100000);
}
if ($mcastexpect > 0 && count($rigs) >= $mcastexpect)
$doretry = false;
} while ($doretry && --$retries > 0);
socket_close($rep_soc);
}
#

Loading…
Cancel
Save