Windows kernel dispatches all UDP packets to the original (listener) socket, so the faces don't get anything once they've a separate socket.
Possible solution - dispatch to individual faces from the listener socket. This needs to be optimized to allow looking up the face table fast; should be possible with ip-port hash.
E.g. hashmap with ip-port --hashmap--> faceid --facetable--> face --> handleIncomingFrame.
Calling handleIncomingFrame will not have race in this case since the face thread is useless (but need a check for Windows to prevent races on other platforms)
Windows kernel dispatches all UDP packets to the original (listener) socket, so the faces don't get anything once they've a separate socket.
Possible solution - dispatch to individual faces from the listener socket. This needs to be optimized to allow looking up the face table fast; should be possible with ip-port hash.
E.g. hashmap with
ip-port --hashmap--> faceid --facetable--> face --> handleIncomingFrame.Calling
handleIncomingFramewill not have race in this case since the face thread is useless (but need a check for Windows to prevent races on other platforms)