我编写了一些基于 asio 的网络类,只要它们在单独的进程中运行,它们就可以按预期工作。在提高我的测试覆盖率的过程中,我遇到了接收器通常会停止接收数据的情况。由于我的 (CxxTest) 测试套件是单个应用程序,
我已经把代码放在这里了,在一个要点中,它很短,但它的“要点”是:
create endpoint (127.0.0.1:54321, shared by rx/tx)
create service
create tx socket
open
set reusable(true)
set broadcast(true)
create rx socket
open
bind to endpoint
async_receive...
create thread(io_service::run)
send data several times
wait a few seconds
io_service::stop
thread::join
我的receive
函数只是将新数据转储到一个向量中并存储它,它还会发出一个打印语句,其中包含它接收到的字节数。当我运行它时,我收到 1 个receive
带有预期数据量的调用,有时我会收到 2 个,很少会收到 3 个。
现在,当我把这个文件分成两半时,一个只做发送端,另一个只做接收端,效果很好。除了删除每个部分的不相关贡献之外,绝对没有任何变化。
我在 WireShark 中观看过,所有传输都按预期进行,因为它们应该是同步的,这对我来说很有意义。就好像接收处理程序没有看到任何新的进来,所以它只是静静地坐着。我怎么会丢失数据?我是 asio 的新手,所以我希望我只是在做一些明显愚蠢的事情!