2010-08-29 60 views
4

嘿...正如在最近的一個問題中(沒有人對最後的更改做出反應),我在分配由recvfrom填充的sockaddr結構時遇到問題。將sockaddr_storage複製到另一個sockaddr_storage更改地址

正如我已被告知,我沒有改變我的sockaddr到struct sockaddr_storage的和鑄造它在最後一刻,以確保具有地址空間不足的...

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

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

不要工作...任何人有一個解決方案複製struct sockaddr_storage的或至少地址保持在一個結構,並得到後來的原始值?...

謝謝。

編輯:定義爲SOCKADDR和struct 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

對於那些不知道,你能提供sockaddr_storage結構/類的定義嗎? – Arun 2010-08-29 15:41:13

+0

將其添加到編輯部分 – Incubbus 2010-08-29 16:09:30

+0

謝謝。基於這個定義,我期望memcpy能夠工作。你能告訴我們爲什麼你認爲memcpy不起作用嗎? – Arun 2010-08-29 16:32:34

回答

1

你複製似乎是正確的(在memcpy,至少)。我懷疑你誤解了結果。您可以嘗試使用memcmp來驗證副本是否成功。

相關問題