- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/classes/general/smtp.php
- Класс: CSMTPServer
- Вызов: CSMTPServer::Listen
function Listen()
{
global $DB, $CACHE_MANAGER;
$cnt = 100;
while (true)
{
$cnt++;
if($cnt>5)
{
$cnt = 0;
$stats = Array(
'started'=>$this->startTime,
'uptime'=>time() - $this->startTime,
'messages'=>0,
'connections'=>0,
'connections_now'=>0,
'servers'=>Array()
);
foreach($this->arServers as $arServer)
{
$stats["servers"][] = Array(
'id'=>$arServer->arFields["ID"],
'server'=>$arServer->arFields["SERVER"],
'port'=>$arServer->arFields["PORT"],
'started'=>$arServer->startTime
);
$stats["messages"] += $arServer->msgCount;
$stats["connections"] += $arServer->conCount;
$stats["connections_now"] += count($arServer->arClients);
}
$CACHE_MANAGER->Read(33, "smtpd_stats");
$CACHE_MANAGER->SetImmediate("smtpd_stats", $stats);
if($CACHE_MANAGER->Read(3600000, "smtpd_reload"))
$this->ReloadServers();
$CACHE_MANAGER->Clean("smtpd_reload");
$bStop = $CACHE_MANAGER->Read(3600000, "smtpd_stop");
$CACHE_MANAGER->Clean("smtpd_stop");
if($bStop)
{
$CACHE_MANAGER->Clean("smtpd_stats");
return;
}
$DB->Query("SELECT 'x' FROM b_user WHERE 1=0"); // nop
}
$arReadSockets = Array();
foreach($this->arServers as $server)
$arReadSockets = array_merge($arReadSockets, $server->GetSockets());
if(count($arReadSockets)<=0)
sleep(1);
else
{
$n = @stream_select($arReadSockets, $w = null, $e = null, 3);
if($n > 0)
{
foreach($arReadSockets as $r)
{
if(($server = $this->FindServerSocket($r))!==false)
{
$server->AddConnection();
}
else
{
if(($conn = $this->FindServerConnection($r))!==false)
{
$conn->Receive();
}
}
}
}
}
$arServers = $this->arServers;
foreach($arServers as $server)
$server->CheckTimeout(600);
}
}