|
Boost : |
Subject: [boost] asio loopback behavior, windows vs. linux
From: Adam Crain (jadamcrain_at_[hidden])
Date: 2010-06-07 17:51:26
Theres an interesting behavioral difference between how the loopback works
with ASIO on windows/linux.
I have constructed a test that talks to an echo server across the loopback.
The test steps are:
1) Open the socket using run_one(), verifying it is open
2) Start an async read
3) Start an async write
4) Call run_one, then verify the write succeeds
5) Call run_one, then verify that the data you write is received
6) Goto step 2 some number of times since the behavior is
non-determinsitic
One windows, this seems to consistently fail within the first 100
iterations, because on occasional you get the read callback with echoed data
before the write success comes back!!!!
This seems crazy that another process answers you before the OS/ASIO has
even told you the write was successful. On Linux I have not been able to
make this happen even with 10Ks of iterations.
I can only assume that:
1) This can actually happen with Windows loopback + thread scheduling
and my assumption that write callbacks will always occur before response
data is invalid
2) There is a bug in the windows impl of ASIO that makes this possible.
If anyone can shed some light on this Id really appreciate it. I have code
that wants to step through a series of states, and it makes things a lot
more complicated if I cant assume that the write callback will always occur
before data received thats a response to what I sent.
Thanks!
Adam
Adam Crain
Manager of R&D
Green Energy Corp.
919-428-1002
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk