In a case like this, I would write my own copying function. It could be something like
void structCopy(struct* dest, const struct* src);
Inside of this function, use memcpy() to copy everything over except for the pointers.
I had to do something like this when I was making a multiplayer game - copying pointers like this. In this kind of pattern it's typical to assume that this is a function that understands exactly what it has to do - that is, structCopy() is specifically designed for this particular struct. So it is aware that there is a sockaddr inside of the object.
So really, just hardcode inside of this function how you want to handle it. Do you want it to create a new sockaddr on the other end? Then have the copy function do that. Or whatever works.
TL;DR - Create a special copy function for your struct that knows what is inside the struct and have it handle the sockaddr according to whatever your specifications are. By making it part of the class (or a friend function) you're not breaking any rules by hardcoding the function.