2
我正在寫boost :: asio的udp廣播服務器。 Udp數據包將從一個源端接收並廣播到多個目的地。在單線程中做這樣的事情是否安全?是否可以在一個udp套接字中發出多個async_send_to安全?
boost::asio::ip::udp::socket s;
MyHandler handler; // do nothing handler
MyBuffer buffer; // buffer is allocated on heap and managed by smart ptr
...
s.async_send_to(buffer, destination1, handler);
s.async_send_to(buffer, destination2, handler);
s.async_send_to(buffer, destination3, handler);
或者我應該使用阻塞send_to?還是應該鏈接它們,即在第一個async_send_to的完成處理程序中調用第二個async_send_to?
你說得對,但我在這裏關心的不是緩衝區的生命週期(它被分配在堆上,並由引用計數的智能指針管理)。相反,我想確認在同一個UDP套接字上發出多個掛起的async_send_to操作是合法的,非法的還是未定義的行爲?只要我知道,即使在單個線程中,在同一個TCP套接字上發出多個async_read操作也是不安全的,因爲async_read是一個組合操作,因此接收到的底層數據可能會在多堆操作之間交織。 – user869210