9

我读过不建议对来自不同线程的套接字进行多项操作。但是,如果我从同一个线程 socket.async_read 和下一个 socket.async_write 调用(不等待前一个线程完成)怎么办?我可以期望在其中一项操作完成后会运行正确的回调吗?

4

1 回答 1

12

我发现是的,您可以在同一个套接字上有一个待处理async_read和一个待处理,而不会出现问题。async_write当您调用该io_service::run()方法时,回调将按预期完成。

在同一个套接字上发出多个 async_reads 或在同一个套接字上发出多个 async_writes 可能会导致意外行为,具体取决于所涉及的套接字类型。特别是,在同一个 TCP 套接字上使用多个 async_write 可能会导致数据以与您最初预期不同的顺序输出,并混合发送数据。在 UDP 中,它可能更合理,但我仍然建议不要这样做。

于 2012-11-29T16:24:28.453 回答