Solution is very simple:
struct iOverlaped : public OVERLAPPED{
enum Type {
Send,
Receive
};
iOverlaped(Type type_ ) {
ZeroMemory(this, sizeof(iOverlaped));
type = type_;
}
Type type;
};
And for every connection we have to create two overlapped instances (one per each operation type) ...