копирование sockaddr_storage на другой адрес изменения sockaddr_storage - PullRequest
4 голосов
/ 29 августа 2010

Эй ... Как и в недавнем вопросе (никто не реагировал на последние изменения), у меня проблема с назначением структуры sockaddr, заполненной recvfrom.

Как мне уже советовали, я изменил свой 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 Ответ

1 голос
/ 29 августа 2010

Ваше копирование выглядит правильно (по крайней мере, memcpy).Я подозреваю, что вы неправильно анализируете результат.Вы можете попробовать memcmp, чтобы убедиться, что копия была успешной.

...