On 17/10/2017 16:48, Sharma, Nishant wrote:
I have created an Asynchronous TCP server and client and it works fine.
Since it is asynchronous, it uses API’s like async_read, async_write etc..
Is it possible that the same code be used to do “synchronous” communication which results in blocking any further task in the queue unless the current i/o task is complete ?
That kinda defeats the point of using asynchronous functions to begin with. Blocking functions are the arch-nemesis of asynchronous code. With asynchronous code, if you don't want to do something until the task is complete, then don't start it until the completion callback is called, and only have one operation "in flight" at any given moment. If you want to have operations executing in parallel but merely want to make sure that the handlers don't get called concurrently, then link them to the same strand. (This is not necessary but not harmful when only one thread is running the io_service.) If you want to make sure that nothing happens in parallel and everything blocks until it's done, then use synchronous calls instead. There's an example for that too. Bear in mind that while this is simpler to code, it's also less scalable.