Что за коды получает errorcb в event_buffer_new?

EugeneVB

Новичок
вот код
PHP:
$buffer = event_buffer_new($connection, 'readHand', NULL, 'errorHand');
function errorHand($buffer, $error) 
{
	
}
постоянно в качестве error получаю 65 и 17, не могу найти, что они значат
 

флоппик

promotor fidei
Команда форума
Партнер клуба
PHP:
<?php
$consts = get_defined_constants();
foreach ($consts as $name => $value)
{
	if (strpos(strtoupper($name), 'EV') === 0)
	{
		echo $name . ' = ' . $value . '<br/>';
	}
}
?>
EV_TIMEOUT = 1
EV_READ = 2
EV_WRITE = 4
EV_SIGNAL = 8
EV_PERSIST = 16
EVLOOP_NONBLOCK = 2
EVLOOP_ONCE = 1
EVBUFFER_READ = 1
EVBUFFER_WRITE = 2
EVBUFFER_EOF = 16
EVBUFFER_ERROR = 32
EVBUFFER_TIMEOUT = 64

65 = 1 + 64 = EVBUFFER_READ | EVBUFFER_TIMEOUT
17 = 1 + 16 = EVBUFFER_READ | EVBUFFER_EOF

Могу ошибаться, впрочем.
 

Активист

Активист
Команда форума
Если это о том, что я думаю - чтение на евенте с сокета, то там всегда есть два типа ошибок, как раз то, о чем говорит флоппик, это
1. EVBUFFER_READ | EVBUFFER_TIMEOUT - Connection timeout (отрубился инет, коннект поравался во время передачи).
2. EVBUFFER_READ | EVBUFFER_EOF - Connection reset by pear - коннект оборван той стороной во время трансфера или получен конец передачи.

http://www.slideshare.net/psihius/php-daemons-new

Лучше все же писать демоны на чистом языке (c, c++)
 

EugeneVB

Новичок
c 17 стало ясно, получаю при отключении клиента,
а вот 65 вызывает вопросы
судя по названию, да и методом тыка выяснено, что этот код я получаю при отсутствии активности определенное время, если регулярно передаю данные, соединение держится.
я посчитал, что стоит добавить второй аргумент в
PHP:
$connection = stream_socket_accept($socket,10000);
однако это не помогло.

ВСЁ, ЯСНО
вот что
PHP:
event_buffer_timeout_set()
 

tony2001

TeaM PHPClub
Есть желание добавить примеры в документацию?
Четкие понятные самодостаточные куски кода (чтоб можно было скопировать и выполнить).
Шлите мне, я добавлю.
 

EugeneVB

Новичок
Лично мне не стоит писать примеры, всё-таки по ним люди учатся.
Сам делал по этим примерам ссылка
Не хватает примера с таймерами, насколько я понял, вариант с временным файлов это костыль и благодаря собственно Вам теперь есть поддержка.
Но нигде об этом не написано, не могу понять, что написать в качестве $fd в event_set
 

Активист

Активист
Команда форума
tony2001
За примерами лучше наверное к 440hz и Long, они делали доклад по этой теме - демонизация браузерной игры :D
 

tony2001

TeaM PHPClub
Они мне грозились-грозились, но ничего не прислали в конце концов.
 

Anton Zaluskiy

Новичок
private $event_errors = array(
'EVBUFFER_READ' => 1,
'EVBUFFER_WRITE' => 2,
'EVBUFFER_EOF' => 16,
'EVBUFFER_ERROR' => 32,
'EVBUFFER_TIMEOUT' => 64
);

private function handler_error_event($client, $error_ids, $params) {
$error = array();
foreach ($this->event_errors as $error_type => $error_code) {
if ($error_ids & $error_code) {
array_push($error, $error_type);
}
}
echo 'error event #'.$error_ids.' '.join(' | ', $error)."\n";
}
 

tony2001

TeaM PHPClub
странно, а зачем эти константы в массив загонять в таком виде?
я их добавил уже больше года назад в экстеншен, они точно есть в 0.0.4.
 

tony2001

TeaM PHPClub
честно говоря, не понимаю о чем вы.

я про это:
> 'EVBUFFER_READ' => 1,

значения констант зачем цифрами забивать?
непонятно просто зачем тогда сами константы нужны, если всё равно используются их значения.
 

Anton Zaluskiy

Новичок
Понял, да, логично, забивал для того, чтобы самому разобраться где что, так как недокументированы они
 
Сверху