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