我在局域网中有两台机器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 =
" 00 00 00 00 00 00 00"}
接收到第一个数据报时,recvfrom()没有填充结构cliaddr
的原因是什么?
在调用recvfrom
之前,必须正确初始化len
参数。
。
len = sizeof(struct sockaddr_in);
n = recvfrom(..., &len);
recvfrom
函数使用长度来帮助确定sockaddr
指针实际指向的结构体类型。