我正在使用UDP服务器,我从EINVAL
函数获得了sendto
的错误。文档说这是因为The dest_len argument is not a valid length for the address family
。我无法理解这一点。这是违规行。
*clientlen = sizeof(struct sockaddr);
printf("Clientlen: %d\n",*clientlen);
perror("Before:");
tmpn = sendto(sockfd, buf, BUFSIZE, 0, (struct sockaddr *) clientaddr, *clientlen);
perror("After:");
printf("Errno: %d\n",errno);
if(tmpn < 0) perror("Acknowledging");
printf("Clientlen: %d\n",*clientlen);
这提供了以下信息:
Clientlen: 16
Before:: Success
After:: Invalid argument
Errno: 22
Acknowledging: Invalid argument
Clientlen: 16
这是我所指的文件:http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html
我知道perror设置在这一行,所以问题必须来自这里。 clientlen
的值为16
,我使用ipv4
和udp
。
我查看了这个问题,但似乎没有帮助。 UDP sendto() error: invalid argument
作为一个绝望的希望,我尝试了所有甚至整数从0到32(特别是28和16,分别是ipv4和ipv6),看看是否能解决问题,但事实并非如此。我会喜欢建议。