Berkus
а, ну все равно
Aleksei
Если подойти с точки с зрения x-y проблемы, то смысл - сделать async_read с таймаутом
Aleksei
Клиенты иногда отключаются неправильно, и сокет висит в fin ack
Aleksei
а, ну все равно
В смысле, все равно?
Arseny
Почему убьет? Там contention никакого же нету. Я не знаю как strand внутри устроен, но и теоретически его можно без mutex ов реализовать.
Berkus
В смысле, все равно?
всё равно ловко использовать странды и структурировать стейт-машину соединения правильно - см. beast для примера
Dmitry
Хорошая функция? https://github.com/grishka/libtgvoip/blob/public/os/linux/AudioInputALSA.cpp#L72-L74
Aleksei
всё равно ловко использовать странды и структурировать стейт-машину соединения правильно - см. beast для примера
стейт машина простая - прочитал -> отправил ответ -> встал на чтение Второй пункт можно пропустить, если буфер на запись пустой (не надо отвечать)
Berkus
а вот альса хуевая, зачем я туда опять посмотрел...
Berkus
Где бы об этом почитать? :)
так я тебе сразу сказал где - в исходниках биста и rippled
Aleksei
Попробую почитать, спасибо.
Aleksei
https://github.com/boostorg/beast/blob/develop/include/boost/beast/http/impl/read.ipp#L116
Dmitry
нормальная
не возвращает ничего. нет UB?
Vsevolod
goto в луп - это стильно
Berkus
не возвращает ничего. нет UB?
просто чтобы сигнатура подходила, возвращает мусор
Berkus
который никому не нужен всё равно
Dmitry
который никому не нужен всё равно
если clang'ом собирать, то поведение отличается
Dmitry
https://github.com/telegramdesktop/tdesktop/issues/3412#issuecomment-342012983
Dmitry
мне кажется никогда звонки в телеге не сделают нормально
Vsevolod
могильный телеграм нормально звонит, вроде
Aleksei
Посмотрел в пример с таймаутом для биста http://www.boost.org/doc/libs/develop/libs/beast/example/advanced/server/advanced_server.cpp Примерно как у меня сделано. В on_write проверяется if(ec == boost::asio::error::operation_aborted) return; А потом сразу do_read, в котором async_read Так вот мне приходит колбек on_write без ошибок, но в другом потоке таймер сработал. У них только отличается проверка срабатывания из-за того, что они дедлайн двигают (мне не актуально, я один раз устанавливаю перед ридом).
Aleksei
Похоже, просто перед async_read вставлю проверку socket.is_open()
Aleksei
костыль, конечно...
Aleksei
Нет, нафиг такое. Лучше мьютексом закрою дисконект и рид
🐙 Antony
Похоже, просто перед async_read вставлю проверку socket.is_open()
Оно не поможет, там проверка локальной переменной. Я с подобным боролся сомнительным способом: выставлял платформо зависимые keepalive на tcp соединение в 10 минут, вместо ~4х часов
🐙 Antony
типа через sysctl?
Через setsockopt. Вот тут есть пример кода: https://stackoverflow.com/questions/20188718/configuring-tcp-keep-alive-with-boostasio
Aleksei
Через setsockopt. Вот тут есть пример кода: https://stackoverflow.com/questions/20188718/configuring-tcp-keep-alive-with-boostasio
А, это не keepalive, а именно таймауты чтения и записи. Попробую так, спасибо.
Vitaliy
/report
Berkus
а чочоч
Berkus
/report
чего вам, черти
Aleksei
таймер у тебя в io_service, что там за другой поток и зачем он закрывает сокет вместо выставления нового стейта/флага?
Я же написал, что несколько потоков выполняют io_service.run() Можно и флаги ставить. И проверять их перед рид/райт. Но чтобы изменить флаги, все равно лочить надо
Vitaliy
чего вам, черти
Тут чуваку не нравится что мы за него зачет сдать не можем)
Constantine
чего вам, черти
лучше "чего вам начертить?"
Dr. Friedrich
Кажись он вышел чтоли?
Aleksei
/report
Он ливнул уже
Berkus
а мне показывает в чяти )
Berkus
престон сделяль
Vitaliy
нет, он тут
Aleksei
таймер у тебя в io_service, что там за другой поток и зачем он закрывает сокет вместо выставления нового стейта/флага?
Останавливаю сокет, чтобы все хендлеры вызвались. Хотя, можно вроде бы cancel вызвать для этого. Надо посмотреть доки
Berkus
> Останавливаю сокет, чтобы все хендлеры вызвались Ж - логика
Aleksei
Но вариант с платформозависимым ресив таймаутом мне пока больше нравится...
🐙 Antony
Останавливаю сокет, чтобы все хендлеры вызвались. Хотя, можно вроде бы cancel вызвать для этого. Надо посмотреть доки
cancel для этого подходит лучше всего. close() работает, но не гарантируется его безопасная работа при работе из разных потоков над одним сокета
Constantine
@antoshkka а чем (хотя бы примерно) обусловлена возможность неявно привести const&& к const& в C++ ?
Egor
Я слышал, что идея такая: если мы передаём неконстантную ссылку в функцию, то это как бы возвращаемое значение (иначе можно передать const&). А если передать временное значение, то мы его как бы игнорим. Что наверняка ошибка.
Constantine
Я слышал, что идея такая: если мы передаём неконстантную ссылку в функцию, то это как бы возвращаемое значение (иначе можно передать const&). А если передать временное значение, то мы его как бы игнорим. Что наверняка ошибка.
Я на самом деле попытался написать код, который в рамках операции чтения вешает временный guard, но все ломается в const-редакции потому что даже если я говорю, что возвращаю временный объект, то его все равно можно записать в auto&
Egor
mutable не поможет? Я не очень понял, в чём беда, но вдруг
Egor
И, кстати, что такое «временный мьютекс» и что он защищает?
Berkus
mutable не поможет? Я не очень понял, в чём беда, но вдруг
вот вот, "не совсем понятно wtf происходит вообще и что это за наркомания"
Dr. Friedrich
Чуваки, ежели кто хочет мне помочь с разработкой conan-плагина для visual fuckin' studio, тогда го сюда: https://github.com/ForNeVeR/conan-vs-extension/projects/2
Constantine
Разрушать вижак?
Dr. Friedrich
А что будет делать?
А там вот как раз роадмап на ближайший релиз есть по ссылке.
Dr. Friedrich
Разрушать вижак?
Ни в коем случае!
Constantine
ты предлагаешь поработать над твоим проектом
Constantine
но на вопрос что он делает отвечаешь RTFM
Dr. Friedrich
Проект не мой!
Dr. Friedrich
Это бинкрафтеров, а я просто помочь взялся.
Constantine
это даже не твой проект
Constantine
а, это package manager
Dr. Friedrich
Ну, коль там есть мои контрибьюшены, то, выходит, и мой тоже. Но не только мой. Общественный, в общем. Опенсурс же!
Constantine
у меня windows :)
Dr. Friedrich
у меня windows :)
Хрен знает чем ты наркоманишь, бро
Dr. Friedrich
Это и есть проект по интеграции package manager в IDE для Windows.
Constantine
Ну да
Constantine
Но я пользуюсь windows
Constantine
Мне не нужны пакетные менеджеры
Dr. Friedrich
Мне непонятно, чо он говорит.
Alexander "SonnySlave"
Мне не нужны пакетные менеджеры
а, ясно. Несите следующего, этот бракованый