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

    +161

    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
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    #include "header.hpp"
     
    int main(int argc, char** argv) {
       if ( argc != 4 ) {
          std::cout << "client ip port 0/1 - sleed disabled/enabled" << std::endl;
          return 0;
       }
       std::string ip = argv[1];
       boost::uint16_t port = boost::lexical_cast<boost::uint16_t>(argv[2]);
       bool wsleep = (argv[3][0] == '1');
       std::cout << "sleep " << (wsleep?"enabled":"disabled") << std::endl;
       
       FILE* in = fopen("client_in.log", "wb");
       FILE* out= fopen("client_out.log", "wb");
       if ( !out || !in ) {
          std::cout << "can`t open file!" << std::endl;
          return 1;
       }
     
       boost::asio::ip::tcp::endpoint endpoint(
          boost::asio::ip::address::from_string(ip), port
       );
     
       boost::asio::io_service ios;
       boost::shared_ptr<boost::asio::io_service::work> work(new boost::asio::io_service::work(ios));
     
       boost::thread thread(boost::bind(&boost::asio::io_service::run, &ios));
       
       boost::asio::ip::tcp::socket socket(ios);
       socket.connect(endpoint);
     
       boost::asio::socket_base::non_blocking_io non_blocking_io(true);
       socket.io_control(non_blocking_io);
     
       client_read(socket, in);
     
       for ( size_t idx = 0; idx < 100000000; ++idx ) {
          char* buf = new char[send_buffer_size];
          sprintf(buf, "cs:%8dn", idx);
          start_write(socket, buf, out);
          if ( wsleep ) {
             boost::this_thread::sleep(boost::posix_time::microseconds(1000));
          }
       }
     
       std::cout
       << "send data to server finished!" << std::endl
       << "waiting for all ask`s from server..." << std::endl;
     
       work.reset();
     
       while ( counter ) {
          boost::this_thread::sleep(boost::posix_time::microseconds(1000));
          std::cout << "." << std::flush;
       }
     
       std::cout << std::endl << std::endl
       << "all ask`s received." << std::endl
       << "terminate client..." << std::endl;
     
       socket.cancel();
       socket.close();
     
       thread.join();
       fclose(in);
       fclose(out);
    }

    Запостил: qbasic, 08 Апреля 2011

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

    • Что-то зачастили с Boost.Asio.
      Ответить
    • За
      boost::shared_ptr<boost::asio::io_service::work> work(new boost::asio::io_service::work(ios))

      пора резать зарплату - даже на оф. сайте Asio вывешено правильное решение.
      Ответить
      • "вывешены" там два решения, читайте внимательнее. разве что auto_ptr вместо shared_ptr используется.
        Ответить
        • Вы меня не поняли. За auto_ptr надо делать то же самое. За любые *ptr вместо стека (когда он допустим конечно). Java-сты ликуют, сравнивая свой GC и C++ new/delete.
          Ответить
    • Никогда в жизни не видел такого числа двоеточий практически подряд.
      Ответить
    • :D
      это мой код.
      но типка с ником qbasic я не знаю. очень бы хотелось понять кто "это" ;)

      1. двоеточия пишу всегда и везде. пох на всех. не было смертного доказавшего мне что это плохо. и не будет..
      2. объект типа work невозможно "сбросить" если он на стеке.
      Ответить
      • типок идентифицирован: http://www.cyberforum.ru/members/70452.html
        сама тема, в которой предполагалось обсудить баг, располагалась тут: http://www.cyberforum.ru/cpp-linux/thread272413.html

        ну да ладно..
        Ответить

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