~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest29533
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
acetone_
anon3
b3t4f4c3
fidoid
flumental
nemiga
not_bob_afk
plap
poriori
profetikla
segfault
soos
teeth
tensor
un
weko_
whothefuckami
R4SAS
а что делать с данными которые как бы в этот момент отправляются, но пофакку отброшены?
R4SAS
по факту*
orignal
дропать
orignal
UDP не гарантирует доставку
R4SAS
тогда я правильно понимаю что добавления двух bool и проверок на них тут (https://github.com/PurpleI2P/i2pd/blob/openssl/libi2pd/SSU2.cpp#L592-L595) достаточно?
R4SAS
один для ipv4, второй ipv6
orignal
да так
orignal
нет
orignal
вызывыай is_open перед send_to
orignal
дополнительных переменных не надо
R4SAS
а не слишком ли сильно дергать будет оно?
R4SAS
каждый раз в состояние сокета лезть
orignal
думаю там внтури просто поле
R4SAS
м... ок
R4SAS
запустил, проверим чего получится
orignal
посмотри на предмет торомозов
R4SAS
легко сказать
R4SAS
)))
R4SAS
добавление кода ошибки дает новую инфу: SSU2: Reopening socket in HandleReceivedFrom: code 10052: The connection has been broken due to keep-alive activity detecting a failure while the operation was in progress
orignal
это я даже не знаю
R4SAS
For a datagram socket, this error indicates that the time to live has expired.
R4SAS
TTL?
R4SAS
хм, т.е. при попытке отправки данных не удалось отослать их уперевшить в TTL
R4SAS
странно
R4SAS
как можно упереться в TTL при отправке через датаграммы - мне не ясно
orignal
мне тоже
orignal
завтра дегса спрошу
R4SAS
если что, это boost::asio::error::network_reset
R4SAS
чет не ясно пока что по поводу этой проверки
R4SAS
по идее в доках он bool is_open() const;
R4SAS
bool is_open() const
R4SAS
{
R4SAS
return impl_.get_service().is_open(impl_.get_implementation());
R4SAS
}
R4SAS
bool is_open(const base_implementation_type& impl) const
R4SAS
{
R4SAS
return impl.socket_ != invalid_socket;
R4SAS
}
R4SAS
orignal: не слишком жирно? думаю что оно довольно затратно
orignal
возможно
orignal
так других вариантов нет
orignal
у тебя он может закрыться в любой момент
orignal
ну или эсеппшин прям там лови
R4SAS
в Send? там нечего ловить
R4SAS
так и не падает
R4SAS
там*
R4SAS
оно падает именно в HandleReceive
R4SAS
и затем по стечению не совсем понятных обстоятельств в OpenSocket
R4SAS
а вот насчет того как поднимать сокет когда он крешится в OpenSocket мне было бы интересно узнать
orignal
а что в HandleReceive,
orignal
ты же просто код ошибки должен прилететь
R4SAS
ну вот я сейчас добавил отлов network_reset
R4SAS
посмотрим чего изменится
R4SAS
просто я то говорю о том что если у нас сокет не поднялся то больше мы не пытаемся поднять его вообще
R4SAS
можно кстати еще в Receive проверять поднялся ли он
orignal
попробуй
Vort
"R4SAS как можно упереться в TTL при отправке через датаграммы" - ну видимо петля где-то и роутер на котором закончился TTL шлёт ICMP с матюками обратно
Vort
orignal: оказалось, не все креши выловили :( у меня при сохранении netdb навернулось ночью
Vort
последняя запись в логе: SSU2: Couldn't update RouterInfo from SessionConfirmed in netdb
Vort
креш в функции i2p::data::NetDb::SaveUpdated()
Vort
скорее всего разыменование нулевого указателя
Vort
видел недавно коммит "don't handle unecnrypted DatabaseSearchReply...", у меня был узел без него
Vort
но не знаю, имеет ли креш отношение к этому месту. по логике, что шифрованное, что нешифрованное крешить не должно
Vort
посмотрел на графики - похоже, что за час до креша была волна атаки. связана ли волна с крешем - непонятно
orignal
ну так посмотри где там разыменовывается
Vort
orignal: функция большая. разыменовывается по сути "везде"
Vort
ещё и комиплятор мог заинлайнить что-то
Vort
бинарник собран с -O3, так что есть только асм код
orignal
ладно погляжу
Vort
сейчас точнее напишу, где именно был креш (на асм уровне)
Vort
000000013F1B2A9C mov rdx,qword ptr [r14+30h]
Vort
R14 = 0000000000000F16
Vort
теперь буду в самом бинарнике искать
Vort
строчку с крешем пометил ; !!!!!!!!!!!!!
Vort
там даже строчки внутри функции есть. повезло
Vort
похоже, креш в самом начале большого цикла: for (auto& it: m_RouterInfos)
orignal
значит где то мьютекс не стоит
Vort
похоже на то. и я уже почти уверен, что вот там прямо в for крешнулось
Vort
00000001400E2AAD call sub_14002B880 - это, скорее всего, it.second->GetIdentHashBase64()
Vort
00000001400E2AA8 jz short loc_1400E2A90 - if (it.second == own) continue;
orignal
возможно
user1
Голосую за то, что бы добавить в вебконсоль возможность менять лимиты по ширине канала для транзита.
orignal
можно добавить