【发布时间】:2010-08-29 15:27:38
【问题描述】:
嘿...在最近的一个问题中(没有人对最后的更改做出反应)我在分配由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;
【问题讨论】:
-
不知道的可以提供一下sockaddr_storage struct/class的定义吗?
-
谢谢。根据定义,我希望 memcpy 能够工作。你能告诉我们为什么你认为 memcpy 不起作用吗?
-
我第一次注意到它,因为客户从未收到过答复。当然,这可能是由于 UDP 的自然行为不是可靠的协议。但是当我使用recvfrom的原始地址时,它确实有效......所以我确实设置了一些断点并手动读出了地址,瞧:复制后地址改变了......
标签: c++ copy winsock variable-assignment