嘿......正如最近的一个问题(没有人对最后的更改做出反应)我在分配由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;
答案 0 :(得分:1)
您的复制似乎是正确的(至少memcpy
)。我怀疑你是在误解结果。您可以尝试使用memcmp
来验证副本是否成功。