IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/05/23
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
AreEnn
Leopold_
Most2
Nikat
Opax
Vort
WayBest
`
acetone
anon2
anontor
b3t4f4c3
banona
faceless33
fidoid
grimreaper
itsAMe
k60
karamba_i2p
ncop
nemiga2
onon
onon1
overflow
polistern
poriori
profetikla
qend
r00tobo
soos
teeth
tensor
typhoon_
un
user
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 добавление кода ошибки дает новую инфу: 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 return impl_.get_service().is_open(impl_.get_implementation());
R4SAS bool is_open(const base_implementation_type& impl) const
R4SAS return impl.socket_ != invalid_socket;
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 можно добавить