An7on
sudo voteban
Anonymous
Не работеат, похоже нужно сначала сделать
sudo apt-get install voteban
Sergey
...форумы...а они разве живы где-то кроме даркнета? )
Anonymous
Дык этот форум косит под даркнет
aadz
форумы - нет, а спамеры со своими "лучшими форумами" - все еще да :(
aadz
Андрю туда даже зашел, видимо. И что там? Пипиську обещают, как обычно, увеличивать на 15 сантиметров в месяц?
Интересно, как эта пиписька будет смотреться хотя бы через полгода...
Anonymous
Anonymous
нет.
серёжа
+
Anonymous
> go call admin
Anonymous
Я гофер, ничего не понял.
Anonymous
Похоже на то
Slach
https://www.facebook.com/permalink.php?story_fbid=722477891241449&id=100004377340065
Подскажите, пожалуйста, как в Go, прочитать читать UDP-пакет вместе с адресом отправителя без выделения памяти?
(*UDPConn) Read() - читает без выделения памяти, но не возвращает адрес.
(*UDPConn) ReadFrom() и (*UDPConn) ReadFromUDP() возвращают адрес, но при его создании в (c *UDPConn) readFrom() выделяется память для создания объекта адреса и в syscall.(*RawSockaddrAny).Sockaddr() выделяется память при создании сокета, из которого потом достаётся адрес. Т.е. два совершенно лишних копирования с аллокацией памяти. И это основные источники аллокаций в коде.
Можно достать файловый дескриптор через (c *UDPConn) File() и что-то самому делать, не опускаясь до уровня сисколов. Но как достучаться до нужных методов?
aadz
Прочитать без выделения памяти? Прямо целый UDP-пакет?
Mike
Тогда возникает закономерный вопрос "прочитать КУДА?"
Mike
"читает без выделения памяти, но не возвращает адрес" — адрес чего?
aadz
Для начала возникает вопрос о том, что такое "прочитать"
aadz
Slash, что уже ты таки имел в виду сказать?
aadz
(если ты умеешь читать, конечно)
Mike
он читает наши сообщения без выделения памяти
Mike
и потому не может ответить
aadz
печалька кокая :(
Daniel
коллеги
Daniel
ну вы это
Daniel
ядро выделяет буфер, и читает данные в него
aadz
а... как написать UDP-пакет без выделения памяти?
Daniel
дальше можно этот буфер без копирования передавать туда-сюда, и даже ответ в него положить, и снова передать ядру для отправки
Mike
ну не кажется ли тебе, что общение с ядром с одной строны и желание не трогать сисколлы с другой несколько противоречат друг другу?
aadz
Да хрен с ними с сисколами и ядром. Главное, как память-то не выделять на каждое заходящее UDP, но читать его и долго потом думоть?
Daniel
Да в чем поблема-то?
Daniel
Memcpy очень долгий вызов
Daniel
Если его нет - уде хорошо
aadz
Memcpy бе выделения памяти не получится
aadz
и это - syscall
Daniel
О том и речь
分解物質
aadz
и все это - безо всякого выделения памяти!
aadz
а главное - зачем? :)
aadz
если ядро операционной системы чем-то не устраивает, наверное, пора менять профессию, в конце концов :)
aadz
Или писать свой стек ТЦП/ИП прямо на Go, заворачивать весь траффик туда и там уже прямо без выдеения памяти можно делать что хочешь. Но проще профессию поменять :)
aadz
А скорей всего, и драйвера Ethernet придется самому писать...
aadz
Блин, что-то злые тут все сегодня, даже я :(
Nikolay
я вообще нить дискуссии потерял. у сокета TCP есть буфер на чтение/запись, что в винде, что в линуксе. там накапливаются данные, которые можно вычитать, если говорим о чтении. а как вычитывать и выделять ли память под большие куски это уже разработчику решать, при чем тут выделение памяти и написание своего стека прям мне не понятно
aadz
а прочитать как?
Nikolay
вариант на Go интересует как я понимаю?
Daniel
Коллеги, вы странные
Nikolay
aadz
к словам придираемся, как дети малые, а это не по-хипстерски
aadz
хипстеры обычно добрей, и о чем бы они не говорили, они всегда говорят "как бы" и делают доброе умное лицо
серёжа
aadz
то есть хипстерам все, как бы, глубоко монопенисуально на самом деле, так что нечего к слова цепляться!
aadz
это выделение памяти!
Nikolay
да, разовое. ацептишь коннект и все чтения через один буфер гоняешь
aadz
ужос кокой! А если сразу два коннекта?
Nikolay
можно так, можно через sync.pool еще буферы выделять и отдавать в пул как коннект закрывается
Nikolay
вариантов просто дофига
aadz
странные вы, коллеги. Человек же сказал - без выделения памяти. Зачем обсуждать тут всякие левые варианты?
Daniel
да, так вот
Daniel
я повторюсь
Daniel
вы странные
Daniel
что нам возвращает ядро?
Daniel
оно возвращает нам указатель на буфер
Daniel
с выделением памяти - это с копированием данных из буфера в наш собственный буфер
Daniel
без выделения - это с использованием того буфера, что вернуло ядро
aadz
ну вот :( А говорят, на Go только хипстеры пишут. А они добрые и не зануды...
Alexander
Nikolay
без выделения - это с использованием того буфера, что вернуло ядро
не верно. использовать тот буфер, что использует ядро нельзя. чтобы считать из сокета нужно передать указатель на свой буфер и длину. другими словами не выделяя память считать из сокета что-либо нельзя в принципе (мои слова легко подтверждаются описанием сигнатуры функции recv в sys/socket.h)
Daniel
aadz
Дайте мне ведерко с попкорном, пожалуйста!
Slach
можно я еще немножечко вброшу? 😉
https://github.com/golang/go/issues/3661
Daniel
да я вот гуглю что-то внятное, и пока не нагуглил
Nikolay
это вы просто не в курсе, как работает AIO
epoll/kqueue/iocp? не вкурсе только о kqueue. кроме обвязки (в сравнении с простой реализацией) все тоже самое чтение, что я описал выше - в recv отправляется указатель на буфер и длина и ядро в пользовательский буфер пишет данные из буфера сокета и возвращает кол-во записанных
Daniel
ну так вот это не так
Nikolay
https://www.codeproject.com/Articles/13382/A-simple-application-using-I-O-Completion-Ports-an