提问人:Ieshir 提问时间:8/27/2022 最后编辑:Ieshir 更新时间:8/27/2022 访问量:148
boost::asio udp 套接字读写
boost::asio udp socket read and write
问:
我需要有关情况的建议
我正在做一个udp异步组播转换器:
- 他可以接受来自组播组的数据
- 他可以向组播组发送数据
在以下情况下发送数据:
- async_receive_from -> callback -> async_send(在同一线程中)
- 通过外部定时器 -> async_send(在另一个线程中)
我使用一个套接字进行接收和发送。 我需要从外部定时器同步async_receive_from和async_send_to吗? booast::asio doc 说对象是不安全的。我的解决方案是将 ioserivce post/dispatch 用于外部计时器数据,async_send_to在同一线程中调用
如果我制作两个套接字 - 一个用于读取,一个用于线程,谁来工作这个多播 groud。我需要同步这个吗?
PS 我正在使用一个线程ioservice::run
答:
1赞
sehe
8/27/2022
#1
一旦涉及外部定时器,就可能需要一条链进行同步。唯一的例外是当服务已限制为单个线程时 - 并且“外部计时器”触发器源自同一线程。这称为隐式链。
评论
0赞
Ieshir
8/27/2022
谢谢,更多信息 -> 我使用一个线程 ioservice::run 1) 为什么我的帖子解决方案是错误的?我认为数据保存在 lambda 中并写入,当 asio 调用它时 2) 在 asio doc > 同步发送、send_to、接收、receive_from和连接操作彼此之间是线程安全的 async_read \ write 呢?我在这里需要绞线还是只需要计时器的绞线
0赞
sehe
8/28/2022
谁说你的帖子解决方案是错误的?首先,我没有看到任何代码,所以很难判断是否有问题。即使您有 1 个线程在调整 io_service::run,这也意味着外部调用必须来自另一个线程,因此您确实必须同步对共享 IO 对象的访问。另请参阅 stackoverflow.com/a/12801042/85371
评论