将sockaddr_storage复制到另一个sockaddr_storage更改地址

时间:2010-08-29 15:27:39

标签: c++ copy winsock variable-assignment

嘿......正如最近的一个问题(没有人对最后的更改做出反应)我在分配由recvfrom填充的sockaddr结构时遇到了问题。

正如我所知,我确实将我的sockaddr更改为sockaddr_storage,并在最后一刻将其更改为确保有足够的空间存放地址......

的问题
sockaddr_storage s1, s2; 
/*recv address into s1*/ 
s2 = s1;

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

不工作......任何人都有解决方案来复制sockaddr_storage或至少地址以将其保存在结构中并稍后获取原始值?...

谢谢。

编辑:sockaddr和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;

1 个答案:

答案 0 :(得分:1)

您的复制似乎是正确的(至少memcpy)。我怀疑你是在误解结果。您可以尝试使用memcmp来验证副本是否成功。