I am not quite happy about this; I think Socket::Data should in fact be private. I guess Socket::Attach(SOCKET) would solve the problem, right?
Such a function would be great, but would need one addition. Socket settings such as linger/blocking/delay will not be saved in the class specific variables, even though they will remain effective on the socket itself. I can find only one that is really used; to determine if to peek or directly read. So the function should at least be Socket::Attach(SOCKET, is_blocking)
BTW, I must have missed something, but why you dont just keep using the same Socket after fork?