~AreEnn
~R4SAS
~acetone
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
weko
As of SAM 3.2, multiple concurrent pending STREAM ACCEPTs are allowed on the same session ID (even with the same port). Prior to 3.2, concurrent accepts would fail with ALREADY_ACCEPTING.
weko
i2pd пишет что версия 3.1, но при попытке наскольких accept'ов ошибки не выдаёт
weko
Это кншн хорошо, но с версиями хуня какая-то)
polistern
orignal, R4SAS, утро начинается не с кофе :3 Вот буквально вчера пофиксила)) После добавления сети в control он у меня тоже баговать стал. Сделала нормальную инициализацию вектора по GetFullLen, вроде всё ок.
polistern
R4SAS, картинка шик)
polistern
orignal, магические числа скоро уйдут, всё руки не доходят
orignal
weko у нас нет 3.2
orignal
то есть оно частично реализовано там но не до коннца
R4SAS
polistern: насчет наполнения полей виндового бинарника чего скажешь?
R4SAS
github.com/PurpleBote/pboted/pull/29/files#diff-cc2dd28eabf809c5a57a94c19886550120f4b761c41ae583eda47c83c4fe6ab6R42-R49
R4SAS
конкретно описание, имя организации и прочее
weko
orignal: я примерно так и понял, ну окей
polistern
R4SAS, выглядит ок
orignal
weko я начал делать так и не доделал ))
weko
))
orignal
я чисто потроллить кое кого с мастер сессией
R4SAS
polistern: а откуда у тебя такой выравниватель кода? почему не классические табы и определение блока { ... } на другом уровне?
R4SAS
я уж сижу и думаю как писать, ибо notepad++ так не делает
R4SAS
приходится вручную подгонять
polistern
emacs, у него GNU стиль кода.
polistern
Иногда в SublimeText что-то смотрю
R4SAS
бггг
R4SAS
ты можешь записать файл в репу с конфигурацией форматирования кода, если такое возможно?
polistern
Ок, посмотрю что да как
R4SAS
как пример, в PrivateBin такое: github.com/PrivateBin/PrivateBin/blob/master/.editorconfig
R4SAS
и да, вероятно остановка приложения долгая ибо ты в while петле Daemon::Run спишь 10 секунд
polistern
Не только, там несколько задач есть, которые выполняются по 5 минут, надо везде повтыкать проверку флага на останов, где можно. А так я по логам смотрю он просто долго завершается. Это я ещё сразу сеть тушу, а то продолжал бы паке
polistern
ты обрабатывать)
R4SAS
throw udp_client_server_runtime_error ... + char(errcode) + ...
R4SAS
char?
R4SAS
там тогда не число напечатает, а букву
polistern
Боже, там всё плохо, я этот код не трогала очень давно)) Можешь не удивляться вообще ничему)
R4SAS
)))
polistern
Ну ничего, дочитаю умную книжку и всё сделаю как правильно)
R4SAS
проверяю как ловит SIGINT
R4SAS
ощущение что никак
R4SAS
17:51:11@196 WARN Daemon: signal received
R4SAS
17:51:12@830 WARN Relay: No responses
R4SAS
17:51:12@471 INFO Daemon: Start shutting down
R4SAS
17:51:12@471 INFO Daemon: Stopping SMTP server
R4SAS
17:51:12@471 INFO SMTP: Stopped
R4SAS
17:51:12@471 INFO SMTP: Stopped
R4SAS
и продолжает работать как ни в чем не бывало
R4SAS
хз почему
polistern
Похоже в accept залип, FIONBIO точно non-blocking?
orignal
polistern тебе совет
orignal
магические числа не оставляй на потом
orignal
а сразу объявляй константы в момент написания кода
orignal
просто возьми это за правило
R4SAS
polistern: тут немного по другому с этими FIONBIO
polistern
orignal, теперь то да, а старые надо сесть и переделать под константы.
orignal
polistern а чего не повесишь accept на epoll ?
polistern
Так вот этим и занимаюсь))
R4SAS
orignal: ты прям наровишься убить меня?)))
orignal
гыыы
polistern
orignal, я думала через select делать, не стоит?
orignal
select забудь
orignal
это говно мамнта которое никто уже не использует
orignal
или poll или epoll
polistern
Ок
orignal
epoll предпочительнее
orignal
если R4SAS сможет завести его пол виндой ))
orignal
хочу могу код дать из whitei2p
polistern
Погодь, а что более кроссплатформенное?
R4SAS
он ответит epoll
R4SAS
линей много, а вынь одна )))
polistern
лол
orignal
poll кроссплтаформенный
orignal
epoll чисто лиунксовая вещь
orignal
но якобы есть порты на другие платформы
orignal
а вообще буст ))))
polistern
Ну понятно)
R4SAS
18:05:30@471 INFO Daemon: Stopping network worker
R4SAS
18:05:30@471 INFO Network: UDPReceiver: 1
R4SAS
18:05:30@471 INFO Network: UDPReceiver: 2
R4SAS
huh?
polistern
R4SAS, тогда сделаю сеть через poll и должно стать намного лучше всё) Пока висит получается
R4SAS
а чего должно после m_recv_thread->join (); происходить?
polistern
Это винда?
R4SAS
да
R4SAS
яж довести до умы пытаюсь её
R4SAS
ума*
polistern
Мде, сколько интересных открытий то, я даже и не знаю чего он там ждёт)
polistern
Ну видимо recv блокирует
postsolarpunk_hypn
t1->join в жаве ждёт пока t1 завершится
polistern
Он по SAM пакеты получал в этом запуске?
R4SAS
примерно такое же есть в NetDB
R4SAS
polistern: не знаю
polistern
В лог должен писать на каждую
polistern
Если дебаг уровень
polistern
Он наверное и на линухе тут зависнет, если пакеты идти не будут.
polistern
Во дела
R4SAS
сейчас посмотрю кой чего
R4SAS
не, нету ничего
polistern
Ок, значит poll летит на всю сеть)
R4SAS
попробую хендлер отрубить и глянуть
astralEscapist
задача интересная
astralEscapist
как сделать мультикаст, отправить пакет каждой ноде в сети, но при этом не нагрузить сеть, если этим занимается каждая нода в ней?
R4SAS
да, handle_receive вешает
polistern
Ну так он recv и вызывает
R4SAS
конечно плохо называть еще функции такими же именами, что и доступные
R4SAS
тот же recv
orignal
я оказывается ацеторы в отдельном треде гоняю
R4SAS
а что если я перед m_recv_thread->join () буду закрывать сокет?
orignal
ой лол
orignal
тут ты и попал на линукс ))
R4SAS
ну а какого хрена recv висит то?
orignal
потому что линукс ацтой
orignal
если ты закрываешь сокет в другом треде
orignal
то recv там и будет висеть вечно ))
orignal
я почему и прикалываюсь
uis
Звучит как баг. А recv glibc или boost какой?
orignal
на эти грабли наступют все
polistern
А на BSD как кто пробовал?
orignal
uis это не баг это фича линукс
orignal
polistern на bsd не пробовали
orignal
на солярисе порядок
orignal
если закрываешь сокет в другом треде то recv вылетает
postsolarpunk_hypn
orignal, а как на линухе быть?
R4SAS
так если я вызываю в stop() закрытие сокета, а далее просто цепляюсь к треду, то все завершается
R4SAS
"как было задуманно"
polistern
По идее через select, poll и т.д. тоже должен хорошо отрабатывать, если дескриптор закрыть. Он же как раз состояние его смотрит, если я правильно поняла его.
orignal
polistern вызывать poll
orignal
а потом read
polistern
Ну да
polistern
Я о том же
orignal
под линуксом всегда так делают как раз из-за этого
uis
orignal: а что strace говорит в таком случае?
orignal
uis не знаю
orignal
но про эту особенность лиункса знают все
polistern
Ну понятно, если не стрелять себе в ногу, то вы не выстрелите себе в ногу))
orignal
там проблема что под лиуксом треды вовсе не треды а процессы
uis
Просто у меня подозрение, что где-то есть цикл если recv возвращает ноль
orignal
и типа сокеты между ними незваисимые
orignal
ну так напиши тестовую прогармму и проверь
uis
Ну треды там таки треды, но независимые
R4SAS
uis: recv возвращает 0 в винде при успешном завершении сокета
polistern
Ну не, если через fork, то открытые до него сокеты он вроде как в окружении унаследует.
orignal
так везде так кроме лиункса ))
uis
Есть отдельно pid и отдельно tid(или ppid, не помню как называется)
uis
Не, не ppid
uis
tid
orignal
короче я тебе сказал напиши тестовую прогу и сам увидишь
orignal
R4SAS но там врподе из другого треда можно вызывать shutdown
orignal
тогда завершится
polistern
*** пошла чинить сеть ***
R4SAS
устроили тут polistern безысходность ))))
uis
shutdown(fd, SHUT_RDWR); close(fd);
uis
Так?
orignal
я не помню
orignal
наверное
polistern
Я просто криво написала основной стек, а потом его же и копипастила)
orignal
короче я всегда с poll-ом делаю
R4SAS
19:32:08@471 DEBUG Relay: Stopping
R4SAS
19:33:53@830 DEBUG Relay: Waiting finished
R4SAS
19:33:53@471 DEBUG Relay: Stopped
R4SAS
Blinded message
R4SAS
а в остальном оно корректно останавливается уже
weko
astralEscapist: никак. Количество сообщений равно O(n²), подставляй количество узлов и смотри на результат. На каждый узел приходится O(n) сообщений. Спрашиваешь почему? Полную анонимность не получится сделать, потому пропускная способность
weko
и производительность узлов низкая.
weko
Гипотетически одно сообщение даже на 100к узлов можно отправить, но полноценная сеть не заработает
weko
Например, есть 10000 узлов, каждый использует 5 кбит трафика. Тоесть на каждом узле будет минимум 50 мбит трафика.
orignal
weko мульткаст же работает
orignal
сколько в мире терминалов получают котировки с NYSE
astralEscapist
5 кбит вполне возволяет скачать и отправить 50 мбит, не очень быстро но впринципе возможно
weko
Но это на 10000 узлов
astralEscapist
собственно одно сообщение в секунду
weko
Хотя вполне можно ограничить кол-во узлов на каждое сообщение. При этом анонимность снизится, но не критично
weko
Ну по моим догадкам
weko
Нет, нельзя
weko
Иначе можно будет строить кареляции по типу "этот адрес всегда в пуле адересов, на который отправляется сообщение"
weko
Можно попробовать придумать хитрую криптографию для избежания вычисления, но возможно ли такое, я не знаю
weko
Тоесть например, брать какой-то range адресов рядом с целевым и делать случайные отклонения
weko
И нельзя понять, на какой адрес из, например 1000, целевой
weko
Но производительность всего этого будет оставлять лучшего
weko
Да и кареляции всё равно будут, откинем эту идею
weko
Потому что range популярного ресурса будет использоваться больше, чем другие rangeмы
weko
range'ы
astralEscapist
Это уже усложнение задачи
astralEscapist
надо разобраться хотя бы просто с мультикастом в сети из Х нод
orignal
мультикаст он только локальный
weko
Ну это не сильно сложно. Просто нужно отправить пакет на каждый адрес
astralEscapist
вот как работают DHT? Там же куча нод и все должны знать что у кого хранится
orignal
чтобы его прокинуть в другую сеть это надо делать явным образом
astralEscapist
речь скорее о самодельном мешнете с децентрализованным поиском, где мультикаст нужен для этого самого поиска
orignal
ну вот ygg так и работает
orignal
ищет соседей мультикастом
weko
Он про поиск данных опросом всех нод
weko
Как я понял
astralEscapist
да, нужен мультикаст по нодам меша, а не в локалке для поиска соседей
weko
Тоесть ты хочешь сделать DHT, но с опросом всех нод каждый раз?
orignal
глобальный мультикаст моментально засрет всю сеть
weko
Это же не имеет смысла, когда есть DHT
weko
orignal: такое ничего не выдержит.
astralEscapist
А DHT не опрашивает каждый раз?
astralEscapist
вдруг новые данные появились
orignal
к нам например мультикаст с NYSE приходит по отлельной отоволоконной линии в 10 гигабит
weko
DHT работает так, что ты даёшь ему info hash, он находит ноды, которые ближайшие в логическом смысле, и спрашивает у них, где инфа
astralEscapist
То есть если они обязаны хранить даже чужую инфу, если она им подходит по логике адреса?
weko
А ноды, которые инфу держат, сообщают нодам ближайшим по info hash о том, что у них есть та самая информация
weko
astralEscapist: это ip адреса и инфохеш, тоесть совсем немного. И в среднем каждый хранит одинаково
astralEscapist
Ну просто вдруг какая-то прыступная информация, которую я хранить не хочу
astralEscapist
пускай даже просто хеш от нее
weko
Ну ты и не хрвнишь саму информацию
weko
Максимум адреса, где она есть
weko
Поиск лиссетов в i2p похож на DHT
R4SAS
polistern: кстати
R4SAS
учти что на винде нет толковых доменных сокетов
R4SAS
это к контексту CTL тебе
polistern
Вот я и думала сделать для сокетов везде ifndef _WIN32, типа UNIX-only функционал. Но посмотрела, что ты инклудишь какие-то и подумала они есть))
R4SAS
они есть
R4SAS
но 10+
R4SAS
это одно
R4SAS
win10+
polistern
Ааа, вин 10
R4SAS
а второе - хз как они работают)))
R4SAS
я сейчас начал под сервис пилить
polistern
Ну короче на потом) Пока без них тогда
R4SAS
и увидал что --daemon заставляет запускаться
R4SAS
а вообще - надо сделать как в ygg, возможность указать каким образом работать - через TCP или UNIX
polistern
Уже переделала на конфиг с ifndef, если включены, то в логе скажет, что в винде не включены, только TCP
R4SAS
я сейчас попробую разобраться, запустит ли оно вообще их
R4SAS
буду по дефу пытаться поднять в папке приложения
R4SAS
а то винде точно не по нраву такй путь)))
R4SAS
std::make_unique<bote::BoteControl>("/run/pboted/pboted.sock")
orignal
а что std::filesystem религия не позволяет использовать?))
R4SAS
всм?
polistern
Да божечки, я уже сделала))
orignal
пути обычно делают с помощью std::filesystem
orignal
поскольку там корректно склеиваются под данную ось
polistern
Это просто для проверки было, хотела потестить.
R4SAS
orignal: да это есть
R4SAS
она же FS.cpp унесла к себе, там это реализовано
polistern
Я закончила с poll для POP3, немного обкатаю и сделаю также для SMTP и control. В датаграммах думаю всё-таки select сделать, там так сложно не нужно.
R4SAS
я про путь /run/pboted/pboted.sock в винде))
polistern
R4SAS, не было винды, я и не переживала особо)
R4SAS
скоро залью еще своих правок в PR
polistern
Ок
polistern
Красота :3
R4SAS
BoteControl: creating new socket for control connection
R4SAS
вроде пашет
R4SAS
у тебя логгер не асинхронно чтоль работает?
R4SAS
чет такую фигню делает:
R4SAS
23:01:42@471INFODaemon: Stopped
R4SAS
rker stopped
R4SAS
opped
R4SAS
иногда бывает что 2 сообщения слепливает в строку
polistern
Его почти не ковыряла, надо смотреть
R4SAS
просто еще видно что почти всё работает в одном треде
R4SAS
путь до сокета (/run/pboted/pboted.sock) в конфиг вынеси лучше
polistern
Да не, не должно, там на каждый чих треды. Может не стартует чего?
polistern
Вынесла уже))
R4SAS
@656DEBUGDaemon: Start services
R4SAS
@656INFONetwork: Starting SAM session
R4SAS
@656INFORelay: Load peers from FS
R4SAS
@656INFODHT: readNodes:
R4SAS
@656DEBUGDHTStorage: set_storage_limit
R4SAS
всё на треде @656
polistern
Ааа, это да, инициализация да. Там потом ветвление.
polistern
Буквально сразу после этих сообщений должны треды уже писать
orignal
R4SAS только там бустовский
orignal
а в новых g++ есть и в std
orignal
начиная с g++8
R4SAS
залил правки
R4SAS
github.com/PurpleBote/pboted/pull/29/files#diff-0947e2727d6bad8cd0ac4122f5314bb5b04e337393075bc4b5ef143b17fcbd5b
R4SAS
Blinded message
polistern
Ок