尝试以下操作时,第二个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

07-24 14:40