1. C++ / Говнокод #28214

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    /**
     * @throw   std::system_error 
     */
    auto udp_echo_service(int64_t sd) -> no_return_t {
        sockaddr_in remote{};
        io_work_t work{};
        io_buffer_t buf{};              // memory view to the 'storage'
        io_buffer_reserved_t storage{}; // each coroutine frame contains buffer
    
        while (true) {
            // packet length(read)
            auto len = co_await recv_from(sd, remote, buf = storage, work);
            // instead of length check, see the error from the 'io_work_t' object
            if (work.error())
                goto OnError;
    
            buf = {storage.data(), static_cast<size_t>(len)};
            len = co_await send_to(sd, remote, buf, work);
            if (work.error())
                goto OnError;
    
            assert(len == buf.size_bytes());
        }
        co_return;
    OnError:
        // expect ERROR_OPERATION_ABORTED (the socket is closed in this case)
        const auto ec = work.error();
        const auto emsg = system_category().message(ec);
        fputs(emsg.c_str(), stderr);
    }

    https://github.com/luncliff/coroutine/blob/main/test/net_socket_udp_echo.cpp

    Запостил: kcalbCube, 08 Июня 2022

    Комментарии (9) RSS

    • cococo?
      Ответить
    • >co_wait
      ко ко ко рутины это кру кру круто!!!

      недавно пытался жабоёба перевести на корутины кокококотлина
      но жабоёб всё равно пишет лапшу, и течёт
      максимум он может во фьючу


      Всё таки С++ это современный и удобный язык для программистов, а не говно для домохозяек, как все другие языки
      Ответить
      • Да. Я хотел себе поставить cppcoro, но там нет CMake листа. Нашёл в истории коммитов версию для кмейка, сделал форк, поправил баги, добавил субмодуль и уже после этого смог воспользоватся корутинами. Обожаю C++)
        Ответить
      • Крестопомойные корутины требуют аллокаций хуйпойми какого размера (т.е. хипа по-сути), а это - говно.

        https://govnokod.ru/26982#comment579234
        Ответить
        • А зачем ты используешь помойные? Используй нормальные
          Ответить
          • Мне в контроллерах никакие корутины не требуются. Не столкнулся пока с ситуацией, где бы я такой задумался "эээх, вот были бы ко-ко-корутины, и тут бы все намного проще решалось".
            Ответить
        • ну аллоцируют. и чё?
          Ответить

    Добавить комментарий