That can just as well be implemented by message passing, which can happen through a socket or whatever.
But wait, you don't use blocking-IO, you poll the sockets to see if there is data available, right? Do you realize what you are polling? (hint, it is global and mutable)