2010-08-29 14 views
4

Hey ... Comme dans une question récente (personne n'a réagi aux derniers changements) J'ai un problème avec l'affectation d'une structure sockaddr remplie par recvfrom.copier sockaddr_storage vers un autre sockaddr_storage change l'adresse

Comme je l'ai été informé, je ne change d'sockaddr à sockaddr_storage et casté dans le dernier moment pour être sûr d'avoir assez d'espace pour l'adresse ...

Mais le problème de

sockaddr_storage s1, s2; 
/*recv address into s1*/ 
s2 = s1; 

ou memcpy(&s2, &s1, sizeof(sockaddr_storage));

ne pas travailler ... quelqu'un a une solution pour copier un sockaddr_storage ou au moins l'adresse pour le maintenir dans une structure et d'obtenir la valeur d'origine plus tard? ...

Merci.

EDIT: définitions pour sockaddr et sockaddr_storage (msdn):

struct sockaddr { 
     ushort sa_family; 
     char sa_data[14]; 
}; 


typedef struct sockaddr_storage { 
    short ss_family; 
    char __ss_pad1[_SS_PAD1SIZE]; 
    __int64 __ss_align; 
    char __ss_pad2[_SS_PAD2SIZE]; 
} SOCKADDR_STORAGE, *PSOCKADDR_STORAGE; 
+0

Pour ceux qui ne connaissent pas, pouvez-vous fournir la définition de sockaddr_storage struct/class? – Arun

+0

ajouté dans la partie d'édition – Incubbus

+0

Merci. Selon la définition, je m'attends à ce que memcpy fonctionne. Pouvez-vous nous dire pourquoi vous pensez que memcpy n'a pas fonctionné? – Arun

Répondre

1

Votre copie semble être correcte (la memcpy, au moins). Je soupçonne que vous faites une erreur dans le résultat. Vous pouvez essayer d'utiliser memcmp pour vérifier que la copie a réussi.