2016-09-06 8 views
1

私はASIOのC++ソケットライブラリの初心者です。 'asio nonboost'とopensslライブラリを使ってeclipseで設定を管理する。 "std :: error_code"が解決されません。asio "std :: error_code"がeclipseで解決されていませんか?

私はすでに西に多くの時間を持っていました。

以下は、実行しようとしているasioのasync_udp_echo_serverページです。

#include <cstdlib> 
#include <iostream> 
#include "asio.hpp" 

using asio::ip::udp; 

class server 
{ 
public: 
    server(asio::io_service& io_service, short port) 
    : socket_(io_service, udp::endpoint(udp::v4(), port)) 
    { 
    do_receive(); 
    } 

    void do_receive() 
    { 
    socket_.async_receive_from(
     asio::buffer(data_, max_length), sender_endpoint_, 
     [this](std::error_code ec, std::size_t bytes_recvd) 
     { 
      if (!ec && bytes_recvd > 0) 
      { 
      do_send(bytes_recvd); 
      } 
      else 
      { 
      do_receive(); 
      } 
     }); 
    } 

    void do_send(std::size_t length) 
    { 
    socket_.async_send_to(
     asio::buffer(data_, length), sender_endpoint_, 
     [this](std::error_code /*ec*/, std::size_t /*bytes_sent*/) 
     { 
      do_receive(); 
     }); 
    } 

private: 
    udp::socket socket_; 
    udp::endpoint sender_endpoint_; 
    enum { max_length = 1024 }; 
    char data_[max_length]; 
}; 

int main(int argc, char* argv[]) 
{ 
    try 
    { 
    if (argc != 2) 
    { 
     std::cerr << "Usage: async_udp_echo_server <port>\n"; 
     return 1; 
    } 

    asio::io_service io_service; 

    server s(io_service, std::atoi(argv[1])); 

    io_service.run(); 
    } 
    catch (std::exception& e) 
    { 
    std::cerr << "Exception: " << e.what() << "\n"; 
    } 

    return 0; 
} 
+0

なぜあなたはerror_code'がstd' 'にある'と思いますか? (ヒント: 'boost :: system'にあります) – tkausl

+0

@tkausl asioはスタンドアロンモードで使用できます。この場合、std :: error_codeを使用します。 –

+0

Uhは、それを知りませんでした。この場合、彼は 'system_error'タフを含める必要があります。 – tkausl

答えて

2

あなたは、 "スタンドアロン" asioを使用しているので、error_codeasio::error_codeないstd::error_codeでなければなりません。注:boost::asioではboost::system::error_codeが必要です。

私はboostと「スタンドアロン」asioを切り替えるには、次のマクロを使用します。

#ifdef ASIO_STANDALONE 
    #include <asio.hpp> 
    #define ASIO asio 
    #define ASIO_ERROR_CODE asio::error_code 
    #define ASIO_TIMER asio::steady_timer 
#else 
    #include <boost/asio.hpp> 
    #define ASIO boost::asio 
    #define ASIO_ERROR_CODE boost::system::error_code 
    #define ASIO_TIMER boost::asio::deadline_timer 
#endif 
+0

完璧です。ありがとう。 –

関連する問題