尝试以下操作时,第二个sockaddr中的地址会更改:
/*Stuff*/
sockaddr add1, add2;
recvfrom(/*socket*/, /*buffer*/, /*count*/, /*flag*/, &add1, /*fromlen*/);
add2 = add1; //The sa_data - part changes O_o...
/*Stuff*/
有人知道为什么吗?
编辑:1.我将sockaddr更改为sockaddr_storage,它绝对有足够的空间容纳sockaddr_in!
2.初始化时将结构设置为零
3.我为自己的复印/转让愿望写了一份复印件:
memcpy(&AddrTarget, &AddrSource, sizeof(sockaddr_storage));
但这也无济于事!...我绝望地:(...
最佳答案
呼叫fromlen
时如何设置recvfrom()
?如果为fromlen > sizeof(add1)
,则可能是由于意外而覆盖了add2
。
Beej's Guide建议您使用struct sockaddr_storage
类型的局部变量,该变量必须足够大以容纳任何正在使用的struct sockaddr_foo
。