【发布时间】:2012-11-29 16:16:38
【问题描述】:
我了解到不建议对来自不同线程的套接字进行多项操作。但是如果我从同一个线程 socket.async_read 和下一个 socket.async_write 调用(不等待前一个完成)怎么办?我可以期望在其中一项操作完成后会运行正确的回调吗?
【问题讨论】:
-
你问的是 TCP 套接字吗?
标签: c++ boost asynchronous boost-asio
我了解到不建议对来自不同线程的套接字进行多项操作。但是如果我从同一个线程 socket.async_read 和下一个 socket.async_write 调用(不等待前一个完成)怎么办?我可以期望在其中一项操作完成后会运行正确的回调吗?
【问题讨论】:
标签: c++ boost asynchronous boost-asio
我发现是的,您可以在同一个套接字上拥有一个待处理的 async_read 和一个待处理的 async_write 而不会出现问题。当您调用io_service::run() 方法时,回调将按预期完成。
在同一个套接字上发出多个 async_reads 或在同一个套接字上发出多个 async_writes 可能会导致意外行为,具体取决于所涉及的套接字类型。特别是,在同一个 TCP 套接字上使用多个 async_write 可能会导致数据以与您最初预期不同的顺序输出,并混合发送数据。在 UDP 中,它可能更合理,但我仍然建议不要这样做。
【讨论】: