我在局域网中有两台机器A和B。 在A上有一个UDP客户端, 而在B上有一个UDP服务器,如下:
for(;;){
n = recvfrom(sockfd, mesg, 10000, 0, (struct sockaddr *)&cliaddr, &len);
....}
我注意到当UDP客户端发送第一个数据报时,
通过mesg
可以正确获取数据负载,
但结构体cliaddr
没有被填充,它仍保持着原始值。
例如,如果我使用bzero(&cliaddr, sizeof(cliaddr));
,
在gdb
中,我得到的是:
$1 = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero =
"\000\000\000\000\000\000\000"}
当第一个数据报接收时,recvfrom()为什么没有填充cliaddr
结构体呢?
对于后续的数据报,可以获取有效信息。